我的节点包目前需要express
和locomotive
。 express
和locomotive
都需要commander
个包。
当每个包(express
和locomotive
)需要指挥官时,这将解析为两个不同的文件。基于Node's documentation,commander
包将被执行两次,并且我的应用程序中将有两个commander
包的主副本,每个文件一个。
现在,基于我对require.resolve()
的理解,require()会一直搜索目录树,直到机器的根目录(或者在允许的情况下尽可能远),并查看每一个./node_modules/commander
沿途的目录。
我是否应该将commander
包(以及所有其他重复的包)合并到我应用根目录的node_modules
文件夹中?
编辑时间12:58:我也注意到重复的包可能不是同一个版本。 express
有commander 0.6.1
而locomotive
有commander 1.0.4
。另一个依赖项express
和locomotive
分享mkdirp
分别位于0.3.3
和0.3.4
。
答案 0 :(得分:2)
每个软件包在安装时在各自的node_modules
文件夹中安装自己的依赖项。
例如,express
将拥有它自己的node_modules
文件夹,其中包含特定版本的commander
,而另一个模块将拥有它自己。
确认;
mkdir someNewProject && cd someNewProject
npm install express locomotive
然后看看这些已安装模块的目录结构;
ls node_modules/express
ls node_modules/locomotive
您应该注意到它们每个都有自己的node_modules
文件夹及其依赖项。因此,我不建议尝试制作一个普通的指挥官包。