【发布时间】:2015-07-05 02:17:08
【问题描述】:
我只是有一个简单的问题在任何地方都找不到,他整个上午都在谷歌上搜索。没有太多关于 traceur 的信息,至少对我来说不是那么清楚。
当我使用 traceur 编译单个输出文件并在带有 traceur-runtime 的浏览器中使用它时,应该如何实现 ES6 模块? import 和 export 不断得到 Unexpected token。
我正在使用 gulp-traceur 并且已经尝试了所有模块选项 //'commonjs' //'amd', 'commonjs', 'instantiate', 'inline', 'register'.
我有一个疑问是我一直在寻找关于 commonjs 的答案,但我使用 ES6 模块的想法是拥有不同的源,然后从主导入它们并将所有这些结果编译到一个文件中(我的意思是我不需要在浏览器中异步加载模块)
这是 gulp 任务
gulp.task('scripts', function() {
del.sync(['bin/js/main.min.js']);
del.sync(['bin/js/main.min.js.map']);
gulp.src(["./src/app/init.js", "./src/app/elements/circle.js", "./src/app/app.js"])
.pipe(sourcemaps.init())
.pipe(traceur({modules : 'inline', sourceMaps: 'inline', experimental: "true"})) //'commonjs' //'amd', 'commonjs', 'instantiate', 'inline', 'register'
.on('error', errorParser)
.pipe(jshint())
.pipe(jshint.reporter('jshint-stylish'))
.pipe(uglify({mangle: true})).on('error', errorParser)
.pipe(concat('main.min.js'))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('bin/js'))
.pipe(livereload({ auto: true }));
});
导入时意外令牌来自应用
import Circle from './elements/circle';
或
import * as Circle from './elements/circle.js';
(尝试了几种方法)
导出时也来自circle.js
export default Circle;或export Circle;(也尝试了几种方法)
【问题讨论】:
-
只是提示,我发现 babel.js + webpack 非常适合 ES6 模块。
-
gulp-es6-imports-renamer npmjs.com/package/gulp-es6-imports-renamer
-
我不确定这是否能回答您的问题,但我使用 systemjs builder(带有 traceur 和 es6-module-loader)来构建和提供我的 es6 文件。我正在创建一个有角度的 es6 种子项目。您可以在此处查看代码 - github.com/jabhishek/gulp-es6-angular/tree/…。希望它会有所帮助。
-
不确定您的确切情况,但可能的替代方法是将 browserify 与 es6ify 转换(使用 traceur 转换)一起使用。这将编译您的模块并将它们全部捆绑到一个单独的 browserify 捆绑文件中。
标签: javascript gulp ecmascript-6 traceur gulp-traceur