Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 什么决定了babel Transpile脚本中'require'调用的顺序?_Node.js_Ecmascript 6_Babeljs - Fatal编程技术网

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
之间架起一座桥梁似乎在未来几乎不值得付出努力…