javascript - Babel es2015 预设不会将 Map 和 Set 转换为 es5

标签 javascript ecmascript-6 phantomjs karma-runner babeljs

我正在使用 gulp-babel 将我的 es6 代码转换为 es5

gulp.task('build_all_debug', ['config', 'compile'], function() {
    var stream = gulp.src(['public/js/config.js', 'public/js/*.js', 'public/compiled/*.js'])
        .pipe(babel({
            presets: ['es2015']
        }))
        .pipe(concat('app.js'))
        .pipe(gulp.dest('public/dist'));
    return stream;
});

虽然它大部分工作正常,但实际上并没有转换 Map 和 Set。我的结果 js 代码仍然包含它们,当我使用 karma/mocha/phantomJs 运行单元测试时,出现以下错误:

PhantomJS 2.1.1 (Mac OS X 0.0.0) notes.controller "before each" hook: workFn for "loads notes from the service" FAILED
    Can't find variable: Map
    activate@public/dist/app.js:2402:39

有什么办法可以强制babel将Map和Set转换为es5中的对象和数组吗?

最佳答案

您必须包括 babel-polyfill在您的代码中。

你必须使用 npm 安装它:

npm install babel-polyfill

然后,如果您使用的是 ES6 模块:

import 'babel-polyfill';

或:

require('babel-polyfill');

如果你想在浏览器中运行你的代码,你可以从 cdnjs 加载它:

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.16.0/polyfill.min.js"></script>

关于javascript - Babel es2015 预设不会将 Map 和 Set 转换为 es5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40388530/

相关文章:

javascript - Typescript 覆盖 Mixin 中的构造函数参数

javascript - 如何使用 phantomjs 和 php-webdriver 跟踪页面重定向并持续设置常量浏览器用户代理

javascript - PhantomJS + Meteor (Spiderable) + Heroku 问题

javascript - 为从索引文件导入的 React 组件设置样式时出错,但直接从组件文件导入时则不会

javascript - 如何在高阶 javascript 函数中执行变量捕获?

javascript - 解析 Nodejs 响应后。 JSON 响应结果数组仅作为对象输出。我如何才能显示对象

javascript - 使用 jquery 的响应式弹出 div

javascript - 我怎样才能在 native react 中从数组中找到特定的值

javascript - connect react redux HOC 得到错误 `Cannot call a class as a function`

javascript - 在 GCharts 的 pdf 生成上替代 headless 浏览器