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

时间:2018-09-23 20:47:31

标签: gulp browserify babel-polyfill

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

一段时间以来,我一直在努力使这项工作可行,因为我已经多次在不同的站点提出要求,但是没有一种解决方案真正适合我(或更准确地说,我可能无法使它们适应我的代码)

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

.babelrc

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

package.json:我在开发人员依赖项下拥有babel-polyfill,并试图将其置于依赖项下(都只是通过控制台手动交换并安装它)而似乎没有任何作用

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

我做错了什么?

谢谢

2 个答案:

答案 0 :(得分:13)

您需要在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" ]
      }
    }]
  ]
}

答案 1 :(得分:0)

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

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

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