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

mit*_*med 14 browserify gulp babel-polyfill

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

我已经尝试过一段时间了,因为我已经看到几次在不同的站点上被问到,但是没有一种解决方案真正适合我(或更准确地说,我可能无法适应它们)我的代码)

我认为这些文件涉及:

.babelrc

{
    "presets": [
        "es2015",
        "react"
    ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

最后,我的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'
        }));
});
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

谢谢

con*_*exo 18

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

import 'babel-polyfill';
Run Code Online (Sandbox Code Playgroud)

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

import '@babel/polyfill';
Run Code Online (Sandbox Code Playgroud)

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

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

{
  "presets": [
    [ "@babel/preset-env", {
      "targets": {
        "browsers": [ "last 1 version", "ie >= 11" ]
      }
    }]
  ]
}
Run Code Online (Sandbox Code Playgroud)

  • 看起来像@ babel / polyfill` [已不推荐使用](https://babeljs.io/docs/en/next/babel-polyfill.html)现在支持`core-js`。 (2认同)