节点包中的“需要”钩子

`require` hooks in a node package

本文关键字:钩子 需要 包中 节点      更新时间:2023-09-26

>我正在构建一个包含一些 es6 代码的节点包,所以我想热加载 ES6 代码与 babel .

在我的index.js中,我说:

require('babel/register'); // register es6 transpolar for all following requires
module.exports = {
  foo: require('lib/foo')
, bar: require('lib/bar')
}

lib/foo包含 es6 代码,因此需要 babel 需要钩子才能正常运行。

这使得index.js在此库中使用时正常工作(node index.js工作,以及测试等)。但是一旦我将该项目用作另一个项目中的依赖项,require钩子就无法工作,并且由于es6语法而出现语法错误。

即使

项目是

这可能是与require()缓存相关的一些问题,但无论原因如何,您都不应该在所需的库中使用 BABEL/REGISTER

来自 Babel 文档:

不适合图书馆

require钩子会自动将自身挂接到所有节点需求中。这将污染全球范围并引入冲突。因此,它不适合库,但是如果您正在编写应用程序,那么使用起来完全没问题。