从Babel 5升级到6时出现错误(引用错误:exports未定义)

3
我正在使用Gulp和Babel将客户端es6代码编译为es5。升级后,我在浏览器中遇到了这个错误: Uncaught ReferenceError: exports is not defined 出现此错误的原因是Babel将我的客户端脚本编译为CommonJS模块,并在每个文件开头添加了以下行:
Object.defineProperty(exports, "__esModule", { // <-- ReferenceError: exports is not defined
  value: true
});

但是我在客户端没有使用任何UMD/CommonJS模块加载器,所以这段代码会导致错误。在Babel 5中,为了避免这种情况,我在我的gulpfile中使用了选项modules: 'ignore'

return gulp.src(src, {base: 'src'})
   .pipe(babel({
        modules: 'ignore' // <-- dropped from Babel 6
   }))
   .pipe(gulp.dest(dest));

所以它将我的脚本编译成原始的、清晰的形式。但是这个选项已经从Babel 6中删除,现在会导致错误 [ReferenceError: [BABEL] ..myscript.js: Unknown option: base.modules] ,所以我不得不注释掉这一行。

在Babel 6中是否有替代modules: 'ignore'的方法?


据我看,如果你在插件部分指定了,你可以让编译器将你的ES6/7代码转换为使用模块... 来源。你使用导入或类似的东西吗? - Callum Linington
@CallumLinington,感谢您的回复。我只在服务器端使用导入/导出,但客户端是分离的,并通过API连接到服务器。我没有使用Webpack或Browserify,只是使用Babel将es6代码转换为es5。我尝试安装了您建议的模块,所以现在它用UMD代码包装了我的每个文件。但我的代码更倾向于使用全局作用域(window对象),我更喜欢坚持已经完成的方式。 - artnikpro
你在哪里有Babel配置来启用预设吗?我假设你已经启用了es2015 - loganfsmyth
@loganfsmyth,是的,我的.babelrc看起来像{"presets": ["es2015"], "plugins": ["syntax-async-functions", "transform-regenerator"]}(两个插件用于async/await功能)。 - artnikpro
1个回答

4

由于您正在使用默认启用的es2015这组插件。请注意,其中包含babel-plugin-transform-es2015-modules-commonjs

如果您不希望执行任何类型的模块转换,则需要明确列出要使用的插件,而不是使用es2015


我怎么可能自己想不出来呢...这么简单...谢谢! - artnikpro
更新了插件集合的链接。 - cantera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接