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

时间:2016-06-03 05:50:28

标签: javascript npm gruntjs frontend package-managers

我很长一段时间以来第一次使用咕噜声,我的预感是我用错了。当我运行npm install grunt --save-dev时,我的npm_modules文件夹中装载了许多文件夹(准确地说是87)。我的期望,以及我在观看教程时看到的是,应该添加一个名为grunt的文件夹。同样,当我尝试添加uglify插件(npm install grunt-contrib-uglify --save-dev)时,我会在node_modules中添加额外的31个文件夹。我记得刚刚获得一个带有插件名称的文件夹。我正在使用:

npm版本3.9.3
咕噜版1.0.1
OSX优胜美地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"
  }
}

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:7)

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

来自文档:

  

当npm2以嵌套方式安装所有依赖项时,npm3会尝试缓解此类嵌套导致的深层树和冗余。 npm3通过以平面方式安装一些辅助依赖项(依赖项的依赖项)来尝试这一点,与需要它的主要依赖项位于同一目录中。

因此可以预期这种行为,你没有做错任何事。

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

  

包括对等依赖关系phantomjs-prebuilt @> = 1.9   从karma-phantomjs-launcher将不再   自动安装以在npm 3+中实现peerDependency。您的应用程序需要明确依赖它。

相关问题