webpack
1、你如何搭建webpack
- 先是基本配置,拆分生产、测试和公用模块
- vue和react的loader
- 处理图片的file-loader,url-loader
- 样式打包style-loader,css-loader,less,scss-loader
- 使用babel和corejs、regenerator处理ES6、
- 启动服务devServe和模块化处理
2、webpack有哪些高级特性?
- 多入口HtmlWebpackPlugin,
- 抽离和压缩css,postcss和MiniCssExtractPlugin.loader,
- 抽离公共代码splitChunks、
- 懒加载用箭头函数import文件.then
- 处理react和vue,vue-loader和babel自带preset-react
3、webpack有哪些性能优化?
优化构建速度和优化产出代码 优化构建速度可以使用:
- 优化babel-loader 开启缓存,明确范围、
- IgnorePlugin忽略包内部分文件,比如moment的/locale目录,只要手动导入中文包即可
- noParse忽略对完整的min包,比如已有react.min.js,不需要重复打包、
- happyPack开启多进程打包,提高构建速度、
- ParallelUgifyPlugin开启多进程压缩js、
- 自动刷新watchOptions、热更新devServe、不能用于生产环境
- DllPlugin动态链接库插件,vue和react体积大但是不常升级版本,一个版本构建一次就可
不能使用生产环境
- 自动刷新
- 热更新
- DllPlugin
优化产出代码可以通过:
- 使用生产环境pro命令,vue和react会自动去除警告,启动代码压缩,启动tree-shaking、
- 小图片base64编码、
- bundle和hash、
- 使用CDN
- 提取公共代码、
- 懒加载配合动态组件、
- scope hosting减少闭包
- IgnorePlugin忽略包内部分文件
4、loader和plugin的区别
- loader模块转换器,如less-》css
- plugin扩展插件,如HtmlWebpackPlugin
5、你如何理解babel的?
将高级的es语法,转换成浏览器可识别的ES版本,他还自带了react-loader
6、为何需要进行打包构建
- 体积更小,加载更快(Tree-Shaking、压缩、合并)
- 编译高级语言和语法(TS、ES6以上版本、模块化、scss)
- 兼容性和错误检查(Polyfill、postcss、eslint)
- 统一、高校的开发环境
- 统一的构建流程和产出标准
- 集成公司构建规范(提交测试、上线等)
7、如何产出一个lib?
- output:{filename path library
- 尽量使用babel-runtime
8、webpack的module chunk bundle区别
- module各个源码文件,webpack中一切皆模块
- chunk-多模块合并而成的文件,splitchunk,import()等
- bundle-最终的输出文件
9、为何proxy不能被polyfill?
- 因为它是高级语法,无法用历史方法实现
- class可以用funcion模拟
- promise可以用callback来模拟
10、babel-polyfill和babel-runtime的区别
- babel-polyfill会污染全局
- babel-runtime不会污染全局,
- 产出第三方lib要用babel-runtime
11、webpack如何实现懒加载
- import()
- 结合vue和react的异步组件
- 结合vue-router和react-router异步加载路由