前端为何要进行打包和构建
- 体积更小(Tree-shaking、压缩、合并),加载更快
- 编译高级语言或语法(TS,ES6+,模块化,scss)
- 兼容性和错误检查(polyfill、postcss、eslint)
- 统一、高效的开发环境
- 统一的构建流程和产出标准
- 集成到公司的构建规范
(代码相关、效率相关)
module chunk bundle 的区别
- module 各个源码文件,webpack中一切皆模块
- chunk 多模块合成,如entry import splitChunk
- bundle 最终输出的文件
loader 和 plugin 的区别
- loader模块转换器,如less -> css
- plugin扩展插件,如HtmlWebpackPlugin
常见的loader和plugins
去webpack官方翻一下,能说出之前提到的即可
babel 和 webpack 的区别
- babel JS新语法编译工具,不关心模块化
- webpack 打包构建工具,是多个loader和plugin的集合
如何产出lib
参考dll.js那里
output: {
// lib的文件名
filename: 'lodash.js'
// 输出 lib 到 dist 目录下
path: distPath,
// lib 的全局变量名
library: 'lodash'
}
babel-polyfill 和 babel-runtime 的区别
- babel-polyfill会污染全局
- babel-runtime能解决这个问题
- 产出第三方 lib 要用babel-runtime
webpack如何实现懒加载*
- 结合import语法
- 结合Vue React异步组件
- 结合Vue-router 异步加载路由
Proxy为何不能被polyfill
Class可以用function模拟
Promise可以用callback模拟
但是Proxy的功能用Object.defineProperty无法模拟