npm:子依赖项来自哪里?

npm: Where do the children dependencies come from?

I read on github that:

grunt-mocha-test uses npm's Peer Dependencies functionality

我不确定 "Peer Dependencies" 是什么,所以我检查了 npm 文档并发现:

npm is awesome as a package manager. In particular, it handles sub-dependencies very well: if my package depends on request version 2 and some-other-library

我的意思是:

  1. 'peer dependencies' 意味着依赖项可能需要其他 依赖项才能正常运行。
  2. npm 创建一个树状结构,其中依赖是根, 并且根依赖项具有子依赖项

我剩下的问题是:

子依赖从哪里来?它们是副本吗?或者他们是 对 package.json?

中已存在的其他依赖项的引用

他们每个人都有一份包裹。例如,如果您有一个具有这些依赖项的项目:

"dependencies": {
    "node-handlebars": "*",
    "less-file": "*",
    "async-ls": "*",
    "promise": "4.0.0"
}

和 运行 npm install,你将有 4 个 promise 的副本(你声明为依赖项的副本和其他每个依赖项需要的 3 个副本)

$ find . -name promise
./node_modules/async-ls/node_modules/promise
./node_modules/promise
./node_modules/node-handlebars/node_modules/promise
./node_modules/less-file/node_modules/promise

请注意,即使每个人都依赖于特定版本的 promises 软件包(例如 4.0.0),也会发生这种情况。

尽管看起来有点多余,但我想这会使依赖管理变得容易得多,现在通常使用的额外 space 应该可以忽略不计。