为什么 Grunt 在 node_modules 中安装这么多文件夹?

Why is Grunt installing so many folders in node_modules?

我很长一段时间以来第一次使用 g运行t,我的直觉是我用错了。当我 运行 npm install grunt --save-dev 时,我的 npm_modules 文件夹中加载了数十个文件夹(准确地说是 87 个)。我的期望以及我在观看教程时看到的是应该添加一个名为 g运行t 的文件夹。类似地,当我尝试添加 uglify 插件 (npm install grunt-contrib-uglify --save-dev) 时,我将额外的 31 个文件夹添加到 node_modules。我记得只得到一个带有插件名称的文件夹。我正在使用:

npm 版本 3.9.3
g运行t 版本 1.0.1
OSX Yosemite 10.10.5

package.json

{
  "name": "myapp",
  "version": "1.0.0",
  "description": "the description",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "Me",
  "license": "MIT",
  "devDependencies": {
    "grunt": "^1.0.1",
    "grunt-contrib-uglify": "^1.0.1"
  }
}

非常感谢任何帮助。谢谢

您正在使用 flattens the dependencies 的 NPM 版本 3。您已安装的模块的依赖项也可以安装在您的 node_modules 文件夹下。您可以将其与 Bower 处理瞬态依赖项的方式进行比较。

来自文档:

While npm2 installs all dependencies in a nested way, npm3 tries to mitigate the deep trees and redundancy that such nesting causes. npm3 attempts this by installing some secondary dependencies (dependencies of dependencies) in a flat way, in the same directory as the primary dependency that requires it.

因此,这种行为是意料之中的,您没有做错任何事情。

如果您仍然是 运行 NPM 版本 2,您可能已经注意到它显示了有关此依赖项解析更改的警告消息:

The peer dependency phantomjs-prebuilt@>=1.9 included from karma-phantomjs-launcher will no longer be automatically installed to fulfill the peerDependency in npm 3+. Your application will need to depend on it explicitly.