Node.js 什么决定了babel Transpile脚本中'require'调用的顺序?
所以,到目前为止,我的工作流程是Node.js 什么决定了babel Transpile脚本中'require'调用的顺序?,node.js,ecmascript-6,babeljs,Node.js,Ecmascript 6,Babeljs,所以,到目前为止,我的工作流程是 导入“babel polyfill” 当使用类似于async/的功能时,请等待请求巴贝尔将再生器运行时包括在传输中 对于需要我的模块的用户,我发现以下问题: 用户处于ES2015环境中,并使用babel polyfill传输其代码。由于巴贝尔polyfill只能被要求使用一次,他将无法使用我的模块 如果我因此选择不包含babel polyfill,babel不知道模块确实需要babel polyfill,并且在生成的require顺序中不尊重这一点(至少我认为
导入“babel polyfill”代码>
当使用类似于async
/的功能时,请等待
请求巴贝尔将再生器运行时包括在传输中
对于需要我的模块的用户,我发现以下问题:
- 用户处于ES2015环境中,并使用
babel polyfill
传输其代码。由于巴贝尔polyfill只能被要求使用一次,他将无法使用我的模块
- 如果我因此选择不包含
babel polyfill
,babel不知道模块确实需要babel polyfill
,并且在生成的require
顺序中不尊重这一点(至少我认为是这样)
我最近创建了一个npm模块,它不附带babel polyfill
,但要求用户在调用我的npm模块require
之前包含babel polyfill
,因为它使用async
和wait
因此,在我当前的项目中,我希望像在index.js中一样使用我的模块:
import "babel-polyfill";
import Server from "./Server";
import foo from "bar";
import baz from "qux";
其中,Server
是一个类,它扩展了需要babel polyfill
的模块
但是,index.js
的传输是这样开始的:
!function(e, r) {
if ("function" == typeof define && define.amd)
define(["bar", "qux", "./Server", "babel-polyfill"], r);
else if ("undefined" != typeof exports)
r(require("bar"), require("qux"), require("./Server"), require("babel-polyfill"));
// etc.
}();
在这里,我可以清楚地看到/Server
在babel polyfill
之前是必需的,尽管我的ES2015导入
语法要求相反。事实上,整个秩序是混乱的
这就是我得到错误的原因:
ReferenceError: regeneratorRuntime is not defined
我怎样才能告诉巴贝尔尊重我来源中的顺序?从我所能告诉的,你不能告诉巴贝尔尊重你来源中的顺序-它总是会提升导入,然后评估所有其他内容。当您希望首先确保对某些代码(通常是全局分配)进行评估时,唯一的方法似乎是切换到require。根据我的回答
许多人对此提出(并关闭/拒绝)反对巴贝尔。完全有可能订单处理不当。没有多少人使用AMD的巴贝尔输出。在制作可再发行的模块时,我们通常建议使用babel runtime
让用户加载polyfill,但这也会给AMD设置带来麻烦。@确切地说,我使用UMD输出,只是为了支持每个环境。现在,我可以通过创建一个新文件来解决这个问题,该文件只导入babel polyfill
和index.js
(我不喜欢这个解决方案)。只有两种进口产品,顺序似乎是正确的。从你所说的来看,从import
到require
之间架起一座桥梁似乎在未来几乎不值得付出努力…