Webpack通过IgnorePlugin删除无用模块(如Moment.js locale文件),减少解析与体积;DllPlugin预编译稳定依赖为DLL文件,跳过主流程重复构建,二者配合可显著提升中大型项目编译性能。

Webpack 通过 IgnorePlugin 和 DllPlugin 优化编译性能,核心思路不同:前者减少“不该打包的代码”,后者跳过“重复打包的依赖”。两者不冲突,常配合使用,尤其适合中大型项目。
IgnorePlugin:删掉多余模块,减小体积和解析量
它属于 Webpack 内置插件,作用是让 Webpack 在构建时**完全忽略匹配到的模块路径**,不解析、不加载、不打包。典型场景是第三方库中附带但项目用不到的部分。
- 常见用途:排除 Moment.js 的全部 locale 文件(默认引入所有语言,体积暴涨);跳过某些库的测试或示例目录
-
配置方式:在
plugins中添加,用正则匹配资源路径和上下文目录
new webpack.IgnorePlugin({ resourceRegExp: /^\.\/locale$/, contextRegExp: /moment$/ }) -
注意点:被忽略后,相关功能就不可用;如需局部语言支持,应改用动态导入(
import('moment/locale/zh-cn'))或配合ContextReplacementPlugin替换上下文
DllPlugin:预编译稳定依赖,跳过主流程重复构建
它把长期不变的第三方包(如 React、Vue、Lodash)提前打包成独立的 DLL 文件(含 JS + manifest.json),后续构建时直接引用,省去解析、AST 转换、依赖分析等耗时环节。
-
必须两步走:先运行
webpack --config webpack.dll.config.js生成 DLL 文件和 manifest;再在主配置中用DllReferencePlugin关联该 manifest -
关键配置项:
entry列出要打包的依赖;output.library名称需与DllPlugin.name一致;path指向生成的 manifest 文件 - 实际效果:主构建不再处理 node_modules 中已打入 DLL 的模块;若业务代码频繁改动而依赖不变,二次构建速度可提升 40%~70%
搭配使用的注意事项
- 版本一致性:DLL 构建与主构建必须使用相同版本的依赖,否则 manifest 映射失败,运行时报错
-
Git 忽略 DLL 文件:DLL JS 和 manifest 属于构建产物,应加入
.gitignore,避免提交污染仓库 -
HMR 不兼容 DLL 模块:DLL 中的模块无法热更新,开发时若需调试这些依赖,建议临时禁用 DllPlugin 或改用
externals+ CDN 方案 - 不是所有项目都适用:小型项目依赖少、构建快,加 DLL 反而增加构建步骤和维护成本;优先用于依赖多、构建慢、且第三方库更新频率低的场景



















