Javascript 吞咽巴别塔,出口未定义

Javascript 吞咽巴别塔,出口未定义,javascript,gulp,ecmascript-6,babeljs,ecmascript-5,Javascript,Gulp,Ecmascript 6,Babeljs,Ecmascript 5,考虑下面的示例代码(也许我做错了?) 我有以下任务: gulp.task("compile:add-new-currency-minified", function(){ return gulp.src('src/add-new-currency/**/*.js') .pipe(babel()) .pipe(concat('Flare-AddNewCurrency.js')) .pipe(uglify({"pres

考虑下面的示例代码(也许我做错了?)

我有以下任务:

gulp.task("compile:add-new-currency-minified", function(){
  return gulp.src('src/add-new-currency/**/*.js')
             .pipe(babel())
             .pipe(concat('Flare-AddNewCurrency.js'))
             .pipe(uglify({"preserveComments": "all"}))
             .pipe(gulp.dest('dist/minified/'));
});
当我运行此命令时,会得到以下结果:

"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var FlareCurrency={};exports.FlareCurrency=FlareCurrency;
为了好玩,我想在控制台中运行它,是的,我知道它什么都不做,但我没想到会看到:

Uncaught ReferenceError: exports is not defined(…)
非小型化版本:

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
var FlareCurrency = {};

exports.FlareCurrency = FlareCurrency;

抛出相同的错误创意?

这实际上不是巴别塔问题,您只是试图在浏览器中运行CommonJS代码(从ES6
导出
)而无需准备。CommonJS不在浏览器上运行,您需要使用工具为浏览器打包它,例如或

巧合的是,本周我在Github上创建了一个小项目,显示了Gulp+ES6代码的设置(使用
export
)+Babel+Webpack:


在我的示例中,您可以在浏览器上同步(预加载)或异步(延迟加载)加载JS代码。

在浏览器控制台中?浏览器不支持CommonJS模块。Babel默认情况下会将ES6模块转换为CommonJS模块。这并不能帮助我理解为什么会出现错误,如果我将编译后的脚本放到网页上并运行该页面,chrome仍会给我相同的错误Oo我缺少什么“这不能帮助我理解为什么会出现错误”有什么不明白的?Babel编译到CommonJS模块,浏览器不支持CommonJS模块。这就是你出错的原因。CommonJS模块主要用于Node.js。ES6 Transpiler新手(包括我)的印象是,这一工具(
gulp
/
webpack
)将自行完成这项工作。我渐渐明白那不是真的。尽管我知道CommonJS模块在浏览器中不起作用,但我认为巴贝尔应该负责。但看起来babel适用于大多数es6,但不适用于模块。此外,仅使用大口大口也无济于事。我用webpack进行了一些工作,但我试图替换它,因为它不能很好地与服务器端代码配合使用。但显然,即使我使用gulp,我也必须使用从gulp调用webpack。唉@费利克斯克林:这不是一个有用的评论。显然,我们希望能够使用CommonJS模块并将它们传输到ES5,以便浏览器能够理解它们。你从这个问题中不明白什么?Webpack2(测试版,但完全可用)同时进行透明化和浏览序列化,因此
export
语句将在浏览器中工作。
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
var FlareCurrency = {};

exports.FlareCurrency = FlareCurrency;