为什么设置browserslist后Babel没按预期转译代码?

A. 正汉 阅读 38

我在项目根目录的.browserslistrc里写了"chrome 90",但打包后代码里箭头函数没被转译。明明装了@babel/preset-env,还按网上的教程在.babelrc里配了useBuiltIns和corejs,为什么还是没效果?

尝试过删除node_modules和.lock文件重装依赖,但问题依旧。查看构建日志发现有警告:<code>Module not found: Error: Can't resolve 'core-js/stable'</code>。难道是依赖版本冲突?我的package.json里core-js版本是3.25.0,配置文件都检查了好几遍没发现问题…


// .browserslistrc
[
  "chrome 90"
]

// package.json
"devDependencies": {
  "@babel/core": "^7.20.0",
  "@babel/preset-env": "^7.20.2"
}
我来解答 赞 4 收藏
二维码
手机扫码查看
2 条解答
端木玉研
core-js没装对版本。删node_modules,改用npm install core-js@3 --save再试。
点赞 1
2026-02-07 10:00
书生シ娇娇
你这个问题我之前也踩过,确实挺烦人的。主要问题出在几个地方:

1. **core-js 没正确安装**:你装了 core-js 但看起来没有正确引用。你得运行 npm install core-js@3 --save 确保它在 dependencies 里,不是只在 devDependencies。

2. **Babel 配置缺失或错误**:虽然你提到了 useBuiltIns 和 corejs,但没有贴出 .babelrc 的配置,这里很容易出错。你应该这样配:
{
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "usage",
"corejs": 3
}
]
]
}


3. **Babel 没有正确处理你的代码**:确认一下你的构建工具(Webpack/Vite 等)是否正确地调用了 Babel。比如 Webpack 中需要配置 rule 来使用 babel-loader,并且排除 node_modules。

4. **browserslist 格式问题**:你在 .browserslistrc 里用了 JSON 格式,但这个文件是纯文本的,不需要用数组格式。直接写:
chrome 90


5. **清除缓存**:虽然你说删除了 node_modules 和 lock 文件,但有时候还需要手动清一下构建工具的缓存目录,比如 Webpack 的 cache 目录或者 .vite 等等。

你可以先按照上面几点检查,尤其是 core-js 的安装和 Babel 配置。如果还是不行,贴一下 .babelrc 的内容我再帮你看看。希望能帮到你!
点赞 6
2026-02-03 16:08