Skip to content

1webpack

loader 和 plugin的区别

loader 用于对模块的源代码进行转换。

plugin范围更广 插件目的在于解决 loader 无法实现的其他事。

webpack优化点

减少webpack的打包时间

1. 优化Loader loader文件的搜索范围 include exclude

2. 编译过的文件缓存 loader: 'babel-loader?cacheDirectory=true'

3. HappyPack 将loader的同步执行转换为并行

webpack打包过程也是单线程,特别是执行loader,长时间编译任务多,就导致了等待

4. DllPlugin 将特定类库提前打包然后引入

这种方式极大减少打包类库的次数,只有当类库更新版本才需要重新打包,且也实现了将公共代码抽离成单独文件的优化方案

其他优化点:

  • resolve.extensions 用来表明文件后缀列表,默认查找的是 .js .json,将高频后缀排在后面
  • resolve.alias 可通过别名方式映射一个路径,能让webpack更快找到路径
  • module.noParse 若确定一个文件下无其他依赖,可让该属性Webpack不扫描该文件

让webpack打出的包更小

1. 按需加载

配合前端路由,将每个路由页面单独打包为一个文件

Scope Hosting

解析模块依赖关系,尽可能把打包出来的模块合到一个函数中去

webpack4 optimization: { concatenateModules: true }

Tree Shaking

由于ES6导入 的静态结构支持,可实现删除项目中未被引用的代码

共 20 个模块,1301 篇 Markdown 文档。