【发布时间】:2016-11-02 19:47:39
【问题描述】:
我正在使用 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 在 es5 中将 Map 和 Set 翻译成对象和数组?
【问题讨论】:
-
如果你通过 Babel 使用 ES6,你真的不应该将你的文件连接在一起。如果你这样做而不是使用模块捆绑器,你会遇到麻烦。
-
@loganfsmyth,你能建议一下什么模块捆绑器是 babel 的“通常”选择吗?我现在感觉就像在兔子洞里一样,我使用 babel 的唯一原因是因为同样的 Map/Set 问题,我无法将 typescript 直接编译为 es5,为了兼容性,我必须使用 babel,这很容易添加了一个 babel 管道,但现在看来我需要更改整个构建过程?
-
如今相对正常的工作流程是像 Webpack 或 Browserify 这样的模块打包器。
标签: javascript ecmascript-6 phantomjs karma-runner babeljs