Promise 在 IE11 中使用 babel-polyfill 未定义



正如标题所说,即使我想使用 babel-polyfill 来允许我在代码中使用承诺,但我在 IE11 中遇到了未定义的错误。

我一直在尝试使这项工作工作一段时间,因为我已经看到在不同的站点中被问过几次,但没有一个解决方案真正适合我(或者更准确地说,我可能无法使它们适应我的代码(

我认为,这些是涉及的文件:

.babelrc

{
"presets": [
"es2015",
"react"
]
}

package.json:我在开发依赖项下有 babel-polyfill,并试图将其放在依赖项下(只是通过控制台手动交换和安装它(,但似乎都不起作用

我的脚本.js没有将其作为导入(但是如果我尝试导入 @babel-polyfill,或者当我在 package.json 中看到该语法时带有正斜杠的不同组合,找不到该模块(

最后我的gulpfile.babel.js有这个任务:

gulp.task('build:js', ['lint'], () => {
return browserify({
entries: path.resolve(paths().source.js, 'script.js'),
extensions: ['.jsx'],
debug: true
})
.transform(babelify)
.plugin('minifyify', {
map: 'script.js.map.json',
output: path.resolve(paths().public.js, 'script.js.map.json')
})
.bundle()
.pipe(source('script.js'))
.pipe(gulp.dest(path.resolve(paths().public.js)))
.pipe(notify({
onLast: true,
message: 'Building JS done'
}));
});

我做错了什么?

谢谢

你需要在JS 入口点的任何其他非 polyfill 代码之前导入Babel polyfilly:

import 'babel-polyfill';

或者,如果您已经切换到 Babel 7

import '@babel/polyfill';

另请注意,您应该将预设切换到preset-env.我建议你升级到 Babel 7 并使用@babel/preset-env

假设你已经切换到 Babel 7,你的.babelrc应该是这样的:

{
"presets": [
[ "@babel/preset-env", {
"targets": {
"browsers": [ "last 1 version", "ie >= 11" ]
}
}]
]
}

从 Babel 7.4.0 开始,您需要安装和导入这些库:

import "core-js/stable";
import "regenerator-runtime/runtime";

就像他们在这里说的:https://babeljs.io/docs/en/babel-polyfill

最新更新