关于webpack的基础面试题

83 阅读1分钟

构建流程

此过程是串行过程

  1. 初始参数
  2. 对参数去加载所有配置中的一个插件,执行方法
  3. 确定入口 entry
  4. 编译模块,调用所有的loader
  5. 模块编译,循环递归后,使用loader的编译完所有模块
  6. 输出资源,根据入口和模块的依赖关系组装多个churk成单一的文件

性能优化

  1. 查找范围缩小,从而提升它的查找效率 alias: extenstions
  2. 减少需要解析的文件; noparse
  3. 避免重复编译的第三方库: 如echarts单独打包
  4. 压缩过程中开启多个子进程: js、css、ts等loader

webpack优化

  1. 将按需加载代码,在使用的时候加载
  2. 优化静态资源:svg图标,使用cdn加载(减少服务器压力)
  3. 代码切割,使用code spliting将代码进行分割,避免所有代码打包成一个文件

loader、plugin的区别

  1. loader运行在打包文件之前,plugin在整个编译周期
  2. loader在module.rules中的配置,类型为数组;plugin单独配置,每一项是一个plugin实例

vite比webpack打包更快的原因:

** vite启动到结束的流程

  1. 使用esbuild预构建依赖,提前将项目的第三方依赖格式化为ESM模块
  2. 启动一个node服务
  3. 打开浏览器,去访问index.html
  4. 基于浏览器已经支持原生的esm模块,逐步去加载入口文件以及入口文件的依据

快:

  1. vite不需要做全量打包
  2. 按需加载,模块之间的依赖关系的解析由浏览器实现
  3. 充分利用缓存:vite利用http头来加载整个页面