如何正确定义Prepack的Node.js函数和属性?

时间:2017-05-10 09:51:44

标签: javascript node.js prepack

我想在我的NPM包上使用prepack,但我收到require is not definedmodule is not defined等错误。

我尝试将这些变量定义为:

__assumeDataProperty(global, 'require', __abstract('function'))

但我收到错误unknown reference type

如何才能正确定义Node.js的{​​{1}}全局函数和属性?

1 个答案:

答案 0 :(得分:0)

TLDR;使用兼容模式node-cli

$ prepack sourcefile.js --compatibility node-cli

但截至目前,它仅适用于Node 7.9

以下是对此的解释:

通过将require声明为__abstract('function'),您已通知预包装需要的是一个函数,但现在它返回了什么。正确建模环境意味着您需要正确声明require将返回的内容。但正如你猜测的那样,这并不容易:每个require调用都会根据所需的模块返回不同的对象。

这基本上意味着您必须完成整个模块加载机制,以确定每个对象的形状是由所有需求返回的,以及this commit does究竟是什么。然而,由于PR本身更像是一个PoC,而不是一个完整的功能,因此作者不得不使用Node的一些私有API,这些API往往会在发布之间发生变化。因此,此实验性功能目前仅在节点7.9上可用。

希望这会有所帮助:)