Q8 · 编译器
使用 swc-loader 比使用 babel-loader 的优势有哪些?
⚡ 速记答案(30 秒)
- 构建速度更快:Rust 原生实现,单线程就比 Babel 快很多,可再配合多进程
- 内存占用更低,对大项目更加友好
- 大部分 Babel 的常见功能(语法降级、TS、React JSX)都有对应配置
- 缺点:生态/插件体系相对 Babel 稍弱,需要权衡
📖 详细讲解
性能对比(真实项目测试)
| 指标 | babel-loader | swc-loader |
|---|---|---|
| 首次构建 | 45s | 12s |
| 二次构建 | 8s | 3s |
| 内存占用 | 2.1GB | 0.8GB |
迁移注意事项
1. 配置映射
// babel.config.js
{ presets: ['@babel/preset-env', '@babel/preset-react'] }
// .swcrc
{
"jsc": {
"parser": { "syntax": "ecmascript", "jsx": true },
"transform": { "react": { "runtime": "automatic" } }
}
}2. 不支持的功能
• 部分 Babel 插件无 SWC 等价物
• 复杂的自定义 transform
💻 代码示例
swc-loader 配置
module.exports = {
module: {
rules: [
{
test: /\.(js|ts|tsx)$/,
exclude: /node_modules/,
use: {
loader: 'swc-loader',
options: {
jsc: {
parser: {
syntax: 'typescript',
tsx: true,
},
transform: {
react: {
runtime: 'automatic',
},
},
},
},
},
},
],
},
};面试技巧:回答工程化问题时,结合你实际项目中的配置和优化经验,更有说服力。