npm以一种奇怪的递归方式安装依赖项

for*_*ran 8 npm

我曾经npm install --dev安装过package.json文件中列出的依赖项,似乎不是在平面结构中安装所有软件包,而是在模块目录中安装每个模块的依赖项.

我不得不取消它,因为它花费了很多,因为许多依赖应该已经满足,但它必须在不同的嵌套目录中重新下载它们(我希望没有循环,它最终会完成). ..

使用树命令这是我得到的一个例子:

??? grunt-cli
?   ??? node_modules
?       ??? findup-sync
?       ?   ??? node_modules
?       ?       ??? glob
?       ?       ?   ??? node_modules
?       ?       ?       ??? minimatch
?       ?       ?       ?   ??? node_modules
?       ?       ?       ?       ??? lru-cache
?       ?       ?       ?       ?   ??? node_modules
?       ?       ?       ?       ?       ??? weak
?       ?       ?       ?       ?           ??? node_modules
?       ?       ?       ?       ?               ??? mocha
?       ?       ?       ?       ?                   ??? node_modules
?       ?       ?       ?       ?                       ??? coffee-script
?       ?       ?       ?       ?                       ?   ??? node_modules
?       ?       ?       ?       ?                       ?       ??? jison
?       ?       ?       ?       ?                       ?           ??? node_modules
?       ?       ?       ?       ?                       ?               ??? browserify
?       ?       ?       ?       ?                       ?                   ??? node_modules
?       ?       ?       ?       ?                       ?                       ??? browser-resolve
?       ?       ?       ?       ?                       ?                       ?   ??? example
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样?

Jon*_*den 14

别担心,这实际上是Npm的设计方式.您甚至可能会多次安装相同的模块(尽管通常使用不同的版本).

我们的想法是,在node_modules下安装的每个模块都是该模块的一个独立安装及其依赖项和必要的版本 - 它不依赖于全局安装的模块.

如果您担心多次安装模块的效率低下,那么实验性的npm重复数据删除.

  • 但为什么?在网上搜索时,我正在努力为这种方法找到一个有效的论据。全局安装它们或使用扁平结构有什么问题?这实际上解决了什么问题?似乎您可以将所有内容安装在平面结构中,只需在目录名称中包含版本以避免冲突。当前的实现似乎非常低效。 (2认同)
  • 查看这篇文章@Danny:http://dontkry.com/posts/code/modules-the-right-way.html (2认同)