【问题标题】:does babel provide a method of converting es6 import statements into AMD 'require' callsbabel 是否提供将 es6 导入语句转换为 AMD 'require' 调用的方法
【发布时间】:2015-09-22 15:59:14
【问题描述】:

Babel AMD 模块格式化程序非常适合模块,将脚本包装在 define 语句中。但是,我的项目也有“页面脚本”,一旦加载依赖项就应该执行。这些应该包含在require 语句中。

Babel 是否提供了实现此目的的方法?

【问题讨论】:

  • 是的,事实上默认情况下它会这样做。请参阅文档:babeljs.io/docs/usage/modules。还是我误解了你的问题?
  • 我不确定您所说的“默认情况下会这样做”是什么意思。如果我使用 AMD 模块格式化程序 all 我提供的 js 文件将作为模块包装在定义语句中。我需要一种方法来指定我的一些脚本不是模块,但需要将导入语句转换为 require() 异步调用。我怀疑这可能需要使用 babel 进行两次单独的传递,并使用两种不同的模块格式化程序设置。
  • 然后你必须使用 CommonJS 模块格式化程序(这是默认的模块格式化程序)单独编译这些文件。
  • @FelixKling 不幸的是这不起作用 - commonjs 同步使用 require() 。我需要异步使用。
  • 您希望var foo = require('./foo') 如何异步工作?还是您在谈论不同的require 声明?我不清楚你想要什么,一个代码示例可能会有所帮助。或者你想要的都是不可能的。

标签: javascript requirejs ecmascript-6 amd babeljs


【解决方案1】:

我没有看到让 Babel 生成这样的东西的方法:

require(['foo'], function (foo) {
   ... 
});

Babel 文档中的所有 AMD 示例都显示 Babel 生成 define(...。此外,在 ES6 中似乎没有任何明确的方法来指示 Babel 生成的应该require 调用而不是 define 调用。所以 Babel 输出require 的指令必须是额外的语言。

我查看了用于生成 AMD 模块的 source。我没有看到任何会导致 Babel 输出 require 调用的逻辑。

如果我决定需要一个允许我执行此操作的模块翻译器,我将从 the class in this module 派生一个新类,该类允许指定在某些情况下应该生成 require 调用而不是 @987654330 @。我不太了解 Babel,不知道是否可以防止生成无效的创建(例如,require 调用中的代码尝试对 export 进行任何操作)。

否则,您可以像以前一样随时拨打require

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2016-05-24
    • 2023-03-11
    • 1970-01-01
    • 2017-08-07
    相关资源
    最近更新 更多