除IE11外,我的@babel/preset-env
配置工作正常。当我在IE11中运行时,出现此错误:
SCRIPT438:对象不支持属性或方法"分配">
谷歌搜索错误后,我看到我需要使用babel/polyfill
,但它已被弃用,建议你现在使用core-js
.对于如此广泛使用的工具,缺乏官方文档。
我关注了其他StackOverflow帖子并提出了这个解决方案,但仍然出现错误:
Package.json:
"devDependencies": {
"@babel/core": "^7.10.2",
"@babel/preset-env": "^7.10.2",
"babel-loader": "^8.1.0",
"core-js": "^3.6.5",
...
}
webpack.config:
{
test: /.(js)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
// presets: ['@babel/preset-env'],
presets: [
[
"@babel/preset-env", {
"targets": {
"browsers": ["last 2 versions", "> 0.1%", "not dead", "ie >= 11"]
},
"useBuiltIns": "usage",
"corejs": 3
}
]
]
}
}
},
我没有babelrc
或browserlists
文件,因为我想让它尽可能简约。
为什么这不起作用,为什么我继续收到此错误:
function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}
SCRIPT438: Object doesn't support property or method 'assign'
为未来的读者回答我自己的问题。
因此,@babel/polyfill 被使用 corejs 和 @babel/runtime-corejs3 所取代。执行以下操作以获取 IE11 中Object.assign()
错误的填充代码。
1. 安装软件包
npm i core-js @babel/core @babel/runtime-corejs3
--保存开发
这将在撰写本文时安装 core-js v3.6.5。
2. 更新网络包
将"useBuiltIns": "usage"
和"corejs": 3
添加到您的 babel/preset-env 规则中:
module: {
rules: [
{
test: /.(js)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: [
[
"@babel/preset-env", {
"useBuiltIns": "usage",
"corejs": 3
}
]
]
}
}
},
// Your other rules...
]
},
3. (可选(添加您的浏览器
如果你想指定你自己的浏览器列表字符串,你可以把它添加到你的package.json:
"devDependencies": {
// my dev dependencies
},
"dependencies": {
// my dependencies
},
"browserslist": "last 2 versions, > 0.1%, not dead"
4. 添加导入 corejs
您需要将 core-js 导入到需要填充代码的地方。我把它放在我根./App.js
,让我覆盖全球。
import "core-js/stable";
这应该可以修复IE11中的Object.assign((错误,但是...
5. 其他填充物..
因此,执行此操作后,我在使用IE11不支持的.closest()
时遇到了另一个错误。为此获取 polyfill 的一种快速简便的方法是将此脚本添加到您的
<script src="https://unpkg.com/element-closest"></script>
您也可以将其作为包导入,但上述 CDN 交付快速简便。
有一个类似的问题,设置是使用 .config 和浏览器列表
尝试在下面进行更改,看看是否有帮助
corejs: { version: 3, proposals: true }