为什么npm用这个package.json安装这么多模块?

我最近更新了npm到版本3.3.3,然后开始一个新的项目。 我的package.json如下所示:

{ "name": "my project", "description": "my description", "version": "1.0.0", "license": "MIT", "devDependencies": { "gulp": "^3.8.11", "gulp-uglify": "^1.4.1", "gulp-watch": "^4.1.1", "gulp-rename": "^1.2.2", "gulp-concat": "^2.5.2", "gulp-autoprefixer": "^2.1.0", "gulp-sass": "^1.3.3", "browser-sync": "^2.7.13" } } 

完成npm install我在node_modules目录中看到352个已安装的模块。 在更新npm之前,我只有10-15个安装的模块使用非常相似的package.json(有一些额外的依赖关系)用于另一个项目。

所以你的问题是,为什么新版本的npm安装了这么多的模块,并且可以以某种方式改变它的行为?

这是npm@3的核心function之一:如果可能,您的依赖关系的所有依赖关系现在都安装在同一个顶级node_modules目录中。

从更新日志 :

现在您的依赖关系将被最大限度地安装。 只要有可能,所有的依赖关系,它们的依赖关系,以及它们的依赖关系都将被安装在项目的node_modules文件夹中,而不会嵌套。 当两个(或更多)模块具有冲突的依赖关系时,只能看到嵌套在另一个之下的模块。

这将有希望消除大多数情况下,Windows用户最终的path是Explorer和其他标准工具处理的时间太长。

没有办法禁用。