Babel 转换后为啥 Array.from 还是报错?

轩辕梦媛 阅读 19

我在项目里用 Babel 转 ES6 语法,但打包后在低版本浏览器里 Array.from 还是 undefined,不是说 Babel 会自动处理吗?

我试过加了 @babel/preset-env,也配置了 browserslist,但没手动引入 polyfill。是不是漏了什么步骤?

现在想搞清楚:到底要不要单独引入 core-js 或者 useBuiltIns 配置怎么写才生效?

{
  "presets": [
    ["@babel/preset-env", {
      "targets": "> 1%, last 2 versions",
      "useBuiltIns": "usage",
      "corejs": 3
    }]
  ]
}
我来解答 赞 2 收藏
二维码
手机扫码查看
2 条解答
一奕洳
一奕洳 Lv1
哈,这问题我也踩过坑。关键在于 Babel 默认只转语法不补 API,Array.from这种属于新API需要polyfill。

你配置其实已经接近正确了,但漏了关键两步:

1. 必须安装core-js@3(你配置里写了3就得装3.x版本)
2. 需要在入口文件最顶部显式引入core-js

import 'core-js/stable';


性能上建议用useBuiltIns: 'usage'(你已配置),这样只会按需注入用到的polyfill。但注意webpack打包时要确保Babel能分析到所有文件里的API使用情况。

补充检查点:
- 确认core-js版本和配置一致(3.x)
- 确保没有奇怪的.browserslistrc文件覆盖了你的targets
- 如果用webpack,检查babel-loader是否包含node_modules外的所有JS文件

我之前也以为配好preset-env就完事了,结果在IE11上翻车,都是泪...
点赞
2026-03-08 08:01
UE丶心虹
你漏了两步:1) 要装 core-js 3,2) 得在入口文件最顶部加 import "core-js/stable";。懒人方案直接改配置:

{
"presets": [
["@babel/preset-env", {
"targets": "> 1%, last 2 versions",
"useBuiltIns": "entry", // 改成entry更省事
"corejs": 3
}]
]
}


然后 npm/yarn 装个 core-js@3 完事。babel 不会自动给你加 Array.from 这种原型方法,必须手动引 polyfill。
点赞 4
2026-03-05 08:13