23 面试真题
前端为何打包和构建
- 体积更小 (
Tree Shaking、压缩、合并)加载更快 - 编译高级语言语法 (
TS、ES6+、模块化、SCSS) - 兼容性和错误检查 (
polyfill、postcss、eslint) - 统一高效的开发环境
- 统一的构建流程和产出标准
- 集成公司构建规范(提测、上线等)
module chunk bundle区别
moudle各个源码文件,webpack中一切皆模块chunk多模块合并成的,如entry中定义的、import()动态导入的、splitChunks拆分的bundle最终输出的文件
loader和plugin区别
- loader模块转化
scss=>css - plugin插件 ,扩展功能,如
html-webpack-plugin、clean-webpack-plugin
babel和webpack的区别
babelJS新语法编译工具,不关系模块化webpack模块化打包工具,是多个loader、plugin的集合
babel-polyfill和babel-runtime的区别
babel-polyfill污染全局变量,会影响其他库babel-runtime不会污染全局变量,不会影响其他库- 产出第三方
lib要用babel-runtime
webpack如何实现懒加载
import()语法- 结合
vue、react异步组件 - 结合
vue-router、react-router异步加载路由
为何proxy不能被polyfill
- 如
Class可以用funcition模拟 - 如
Promise可以用callback模拟 - 但
Proxy的功能用Object.defineProperty无法模拟
webpack优化
优化构建速度
可用于生产
- 优化
babel-loader IgnorePluginnoParseHappyPackParallelUglifyPlugin
不用于生产环境
- 自动刷新
- 热更新
DllPlugin
优化产出代码
- 小图片转
base64 bundle加hash- 懒加载
import() - 提取公共代码
splitChunks - 使用
CDN加速 IgnorePlugin- 使用
production模式 Scope Hoisting是webpack3引入的一个新特性,它会分析出模块之间的依赖关系,尽可能地把打散的模块合并到一个函数中去,减少代码间的引用,从而减少代码体积
阅读全文
