排除 node_modules 是最基础关键的提速动作,需显式配置 exclude 和 include,配合 noParse、缓存及 SWC/ESBuild 替代方案可大幅提升构建速度。

直接在 Babel 的 loader 配置里用 exclude 排除 node_modules,是最基础也最关键的提速动作。它能避免 Babel 对上万个已编译的第三方模块重复解析 AST,大幅减少 CPU 和 I/O 开销。
loader 层明确 exclude node_modules
无论你用的是 babel-loader 还是 swc-loader,都必须显式写上排除规则,不能依赖默认行为:
-
exclude: /node_modules/是硬性要求,正则匹配更可靠(比字符串路径更健壮) -
include: path.resolve(__dirname, 'src')同时限定只处理业务代码,双重保险 - 如果项目含测试文件(如
test目录),可一并加入 include,避免漏转
配合 noParse 跳过已编译产物
对那些明确不需 Babel 处理的库(比如 lodash-es、axios 或你自己发布的 UMD 包),直接跳过解析:
- Webpack 的
module.noParse可传入正则或函数,例如:noParse: /node_modules\/(lodash-es|axios|vue\/dist\/vue.runtime.esm-bundler\.js)/ - 这样连模块依赖分析都省了,比 exclude 更彻底
启用缓存加速重复构建
即使排除了 node_modules,src 内部文件仍会反复编译。开启缓存能让未改动的文件直接复用结果:
立即学习“Java免费学习笔记(深入)”;
-
babel-loader加cacheDirectory: true(默认缓存到node_modules/.cache/babel-loader) - 首次构建略慢,后续增量构建快 2–3 倍,尤其适合 dev 模式频繁保存
- 注意:缓存目录建议加入 .gitignore,避免提交二进制缓存文件
考虑升级到更快的替代方案
Babel 本身是 JS 实现,解析 AST 成本高。若项目允许,可换为 Rust 编写的编译器:
- SWC:兼容 Babel 配置,速度提升 10–70 倍,Vue CLI / Vite 均有成熟插件支持
- ESBuild:Go 编写,启动极快,适合做预构建或 dev server 的快速反馈层
- 切换时注意检查是否依赖 Babel 特有插件(如某些自定义语法转换),否则可能需调整


















