Babel 性能优化
1. 面试题
Q: 如果 Babel 编译太慢,有哪些手段可以优化构建速度?
2. 核心解答
Babel 的 AST 转换 是最耗 CPU 的过程。当项目大时,必须采取优化手段。
(1) Webpack loader 配置 (核心)
-
缩小范围 (Narrow Scope): 在
babel-loader的规则中,必须配置exclude: /node_modules/。 这一步至关重要,因为node_modules里的第三方库绝大多数已经编译过了 (CommonJS/ESM)。如果还要对它们做一次 AST 解析和转换,是巨大的浪费。 -
利用缓存: 开启
cacheDirectory: true。 Babel 会将编译结果缓存到node_modules/.cache/babel-loader目录。 第二次启动时,如果文件没变,直接读取缓存,速度提升 2倍以上。
(2) 并行构建
- thread-loader / Happypack:
如果构建仍然很慢,可以把
babel-loader放到子进程 (Worker Pool) 中运行,利用多核 CPU 加速转换过程。
(3) 减少不必要的 Preset/Plugin
- 不要引入用不到的 preset (如
preset-react在非 react 项目)。 - 如果在开发环境不需要兼容 IE11,可以在
preset-env中把 targets 设置为chrome: 'latest',这样 Babel 就不用转换大量语法,速度极快。
3. 面试加分项
Q: preset-env 的 debug 模式?
你可以开启 debug: true 选项。
presets: [['@babel/preset-env', { debug: true }]]。
这时 Babel 会在控制台打印它可以支持的目标浏览器,以及到底引入了哪些插件和 polyfill。这对于排查性能瓶颈和冗余代码非常有帮助。
4. 总结
- Exclude node_modules: Avoid unnecessary work.
- CacheDirectory: Reuse result.
- Parallel: thread-loader.
- Dev Target: Modern browser (Chrome latest) for speed.

