javascript - 将 Babel 与单个输出文件和 ES6 模块一起使用

标签 javascript ecmascript-6 babeljs ecmascript-5

这是将我的 ES6 代码编译成单个 ES5 文件的 gulp 任务。我在 ES6 中使用类和模块(importexport)。

  gulp.src(paths.scripts)
        .pipe(sourcemaps.init())
        .pipe(babel({
          presets: ['es2015']
         }))
        .pipe(concat('all.js'))
        .pipe(sourcemaps.write('.'))
        .pipe(gulp.dest('./www/js'));

但是,由于 Babel 将 ES6 import 指令编译为 require 命令,并且 require 将尝试请求文件,因此请求文件失败因为所有的 ES5 代码都被合并到一个文件 all.js 中。

结果是一堆“错误:找不到模块”错误。当所有模块都保存在单个文件中时,我如何编译可以正常工作的模块?

最佳答案

您不是第一个需要使用 Babel 将 JSX/ES6 转换为 ES5 但又不使用 CommonJS 模块和 Browserify/Webpack 的人。不幸的是,事实证明这在当时是不可能的( 123 ),而且看起来永远不可能。如果你想使用通过 Babel 转译的 ES6,你几乎不得不使用这些工具,但你将没有机会将结果代码与其他连接/内联 JavaScript 一起使用(因为所有这些 require() 调用而不是 window 上的全局变量)。很遗憾 Babel 不允许更改此行为。

关于javascript - 将 Babel 与单个输出文件和 ES6 模块一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33963999/

相关文章:

javascript - 使用cloudflare缓存动态页面

javascript - 我正在制作抽认卡游戏,但 "Next"按钮不起作用

javascript - python PIL _io.BytesIO 无法读取用 Canvas 转换的图像

javascript - Chrome 中表格的 CSV 导出不起作用 - JavaScript/AngularJS

javascript - 条件传播元素

javascript - AngularJS - 广播事件后更新指令的 View

node.js - Node环境下使用Babel获取ApolloClient转ES5 CommonJS模块格式

javascript - 动态添加的输入字段未提交

node.js - 使用预设时是否可以选择禁用 babel 中的插件?

reactjs - 我的测试无法与带有 typescript 的 react 测试库一起使用