如您所知,NPM v3尝试使依赖树尽可能保持平坦。以前我认为它只是嵌套安装依赖项来解决冲突,以防同一个模块有多个版本。
但是,我注意到模块"<div class='field-row clearfix'>" +
"<label for='passenger_" + i +"'></label> " +
"<input id='passenger_" + i +"' name='passenger_" + i +"' required type='text'> " +
"</div>" +
有些奇怪。它具有依赖项protractor
,它始终作为嵌套安装到webdriver-manager
。您可以通过在空文件夹中运行node_modules/protractor/node_modules
来轻松复制此内容。
为什么会这样?
答案 0 :(得分:2)
这是一个很好的问题,目前的行为是预期的。 npmV3
确实在平面结构中安装了依赖项,Protractor
也以相同的方式安装
使用npmV3
使用npmV2.*
所有模块都安装在Flat Structure中,但仍然webdriver-manager
仍然是嵌套结构。这是因为存在冲突的依赖关系。
您的依赖项现在将最大程度地安装。就目前而言 可能的,所有依赖项,它们的依赖项,以及它们 依赖项将安装在项目的node_modules文件夹中 没有嵌套。您只会看到彼此嵌套的模块 当两个(或更多)模块具有冲突的依赖关系时。
现在,让我们说我们想要另一个模块,C。C需要B,但是 在另一个版本比A.但是,因为B v1.0已经是顶级 dep,我们不能将B v2.0安装为顶级依赖项。 npm v3 通过默认为npm v2行为并嵌套新的来处理这个问题, 不同的,模块B版本依赖于需要的模块 它 - 在这种情况下,模块C。
webdriver-manager package.json
列出了依赖项"minimist": "^1.2.0",
,这是其他包的冲突要求,例如乐观主义者需要以下依赖列表
├─ optimist@0.6.1
│ ├─ wordwrap@0.0.3
│ └─ minimist@0.0.10
因此,由于存在冲突的依赖关系,webdriver-manager
protractor node_modules
为完整的依赖关系树做一个npm-remote-ls protractor
并在所有依赖关系中进行冲突