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 依赖项是不是需要其父包中的模块的主要内容,如果未能解决你的问题,请参考以下文章
从 npm 本地导入 ES 模块依赖项,无需捆绑/转译第一方源