Node.js 包自引用

Str*_*der 5 javascript require package node.js

可以封装require自身及其子系统吗?

例如有一个模块: src/deep/path/to/module.js 需要需要 src/another/module.js

代替:

require('./../../../another/module.js');
Run Code Online (Sandbox Code Playgroud)

可以吗:

require('<self>/another/module.js');
Run Code Online (Sandbox Code Playgroud)

例如,这在测试中可能很有用:测试单元可以引用其测试对象,而无需长的上下式路径。

我有两个考虑(但它们并不能完全满足这个问题):

  1. 如果包已经在node_modules文件夹中,它可以通过其规范名称(在其 中)引用自身package.json

  2. 包可以在自己的node_modules文件夹中创建指向自身的符号链接(原文如此!)。还没有尝试过,在某些解决情况下可能会导致无限循环。

mač*_*ček 0

好吧,你可以把它缩短一点。./在这种情况下你不需要领先

require("../../../another/module.js");
Run Code Online (Sandbox Code Playgroud)

进一步删除尾随.js

require("../../../another/module");
Run Code Online (Sandbox Code Playgroud)

另一个答案是建议使用process.cwd()但要非常小心。require仅当应用程序是从同一目录初始化时,您的调用才有效。


不过听上去,4 个目录已经相当深了。您可能需要考虑将大型项目分割成更小的、单一用途的模块。我们需要更多有关该项目的信息才能知道这是否是正确的决定。