Gulp & Babel polyfill 对 IE11 问题的承诺



我有一个用Angular.js写的旧项目。我需要为IE11 polyfill promise,但它不起作用。

在gullfile.js中,我需要Babel的东西

var corejs = require('core-js/stable'),
regenerator = require('regenerator-runtime/runtime'),
presetEnv = require('@babel/preset-env'),
concat = require('gulp-concat'),
gulp = require('gulp'),
babel = require('gulp-babel'),
babelRegister = require ('@babel/register'),

我在这里使用管道

var envJS = function () {
var condition = (config[environment].compression);
return gulp.src(paths.appJS)
.pipe(babel(
{
"presets": [
[ "@babel/preset-env", {
"targets": {
"browsers": ["ie >= 11"]
},
"useBuiltIns": "entry",
"corejs": 3 
}]
]
}
))
.pipe(ngAnnotate())
//.pipe(gulpif(!condition, jshint()))
//.pipe(gulpif(!condition, jshint.reporter('default')))
.pipe(addStream.obj(prepareTemplates()))
.pipe(configServer())
.pipe(gulpif(condition, uglify({mangle: true})))
.pipe(concat(randomNames.js))
.pipe(gulp.dest(folderDist))
.pipe(connect.reload());
};

该代码在chrome上构建和工作,但在IE11上仍然存在问题,这意味着它没有聚合填充Promise对象。

我被卡住了,不知道还能做什么。

我在promise polyfill方面取得了良好的成功。只要它在您的promise特定代码之前加载,它就应该正常工作。我知道这不是babel特有的,但它解决了我的IE兼容性问题,当时我还必须支持IE。

简单的解决方案是简单地将@babel/preset-env选项useBuiltIns"entry"更改为"usage"。此外,你需要确保你的浏览器目标设置是正确的"即>=11〃;是相对最新的,可能根本不需要polyfil。

截至";为什么";部分,嗯,简而言之就是

  • useBuiltIns: "usage"意味着:自动导入每个需要的文件中的polyfil代码
  • useBuiltIns: "entry"的意思是:只检查我的入口文件,看看我是否手动导入"core-js/stable""regenerator-runtime/runtime"模块。如果我这样做了,请微调我的导入以满足浏览器目标的需要

总之,如果您正在使用useBuiltIns: "entry",而忘记在输入文件中手动导入"core-js/stable""regenerator-runtime/runtime",则会失败。如果你的浏览器目标配置错误,你也会失败。

这两个来源更详细地解释:

  • https://babeljs.io/docs/en/babel-preset-env#usebuiltins-条目
  • https://stackoverflow.com/a/56505264/3617380

相关内容

  • 没有找到相关文章

最新更新