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

20

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

我已经尝试让它工作了一段时间,因为我看到在不同的网站上有人问过这个问题,但是没有一个解决方案真正适合我(或者更准确地说,我可能不能将它们适应我的代码)。

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

.babelrc

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

package.json: 我在dev-dependencies中使用了babel-polyfill,并尝试将其放到dependencies中(手动交换和通过控制台安装),但都没有起作用。

我的script.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'
        }));
});

我做错了什么?
谢谢。

你的预设已经过时了。请使用 @babel/preset-env 并切换到 Babel 7。 - connexo
2个回答

19

在您的JS入口点之前,需要导入Babel polyfill以确保任何非polyfill代码之前都已加载:

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" ]
      }
    }]
  ]
}

5
看起来 @babel/polyfill 已经被弃用了,现在推荐使用 core-js - Mr5o1
@Mr5o1 非常有趣,感谢指出!不过,你链接的页面上的信息非常稀少。也许你想测试一下并在这里给出另一个答案? - connexo
这对我没用。无论我尝试什么,都会出现问题。为什么这些东西从来都不容易?!?! - Pezholio

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接