npm 依赖项是不是需要其父包中的模块

Posted

技术标签:

【中文标题】npm 依赖项是不是需要其父包中的模块【英文标题】:Can a npm dependency require a module from its parent packagenpm 依赖项是否需要其父包中的模块 【发布时间】:2016-04-22 12:11:40 【问题描述】:

我正在构建一个服务器应用程序作为“核心”框架和(可能)多个专业化,从“spec_a”开始。

我希望“core”是一个 npm 包,而“spec_a”是一个需要“core”的 npm 包。

虽然我可以 require spec_a 的模块并在函数调用中将它们传递给 core,但我更希望 core 读取配置文件并尝试从其父包中 require 模块(在配置文件中指定)。 (核心不需要知道其父包的名称,因为它会因每个专业而异。)

我正在寻找的是一个require_from_parent(module_name_from_config) 电话。

有没有办法制作这样的东西?

我正在考虑使用require('../'+module_name_from_config),但这很脆弱,可能会在最新的 npm 上中断。

【问题讨论】:

你在实践中做到了吗?我正在寻找做同样的事情。我希望我的库/依赖项动态地从父母 src/ 中获取。 @btd 对不起,那是一年多以前的事了,我什至不记得是哪个项目的了。 【参考方案1】:

我想我在a nodebb blog 上找到了答案。

var Topics = module.parent.require('./topics'),
    User = module.parent.require('./user'),
    Notifications = module.parent.require('./notifications');

【讨论】:

【参考方案2】:

没有明确的“requireFromParent”调用。每当您调用 require 时,它都会首先查看自己的 node_modules 文件夹,如果未找到该模块,它将遍历目录树并检查其父级是否有该模块,这应该可以满足您的目的。

【讨论】:

我认为你对 npm 2.x 是完全正确的。据我所知,npm 3.x 可以将依赖项放在与父包相同的目录中,因此遍历目录树不会找到父模块 - 因此我对脆弱的评论。我弄错了吗? npm 3 基本上会自动对您的模块进行重复数据删除(npm2 也具有该功能,但它不是自动的)。它不应该影响你的用例,它应该做的就是将你孩子的依赖项放在你父母的 node_modules 中。由于child总是回退到parent,所以应该和npm2一样。现在的不同之处在于,如果您的父级和子级具有完全相同的依赖项,则只有父级会安装它,而子级将获取父级的副本。

以上是关于npm 依赖项是不是需要其父包中的模块的主要内容,如果未能解决你的问题,请参考以下文章

AAR 包中的依赖

(三)Unity AB包中的依赖项

从 npm 本地导入 ES 模块依赖项,无需捆绑/转译第一方源

如何通过 NPM 管理非节点模块作为 Node Project 的依赖项?

如何列出 React 项目中未使用的节点模块/依赖项?

“npm install” 将所有依赖项安装在 node_modules 目录中,而不是嵌套它们