执行“npm install”后安装了太多 npm 模块

Posted

技术标签:

【中文标题】执行“npm install”后安装了太多 npm 模块【英文标题】:Too many npm modules are installed after execute "npm install" 【发布时间】:2016-02-21 00:43:55 【问题描述】:

我的package.json


  "name": "thumbnaillist-gulp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": 
    "test": "echo \"Error: no test specified\" && exit 1"
  ,
  "author": "",
  "license": "ISC",
  "dependencies": 
    "browserify": "^12.0.1",
    "gulp": "^3.9.0",
    "gulp-concat": "^2.6.0",
    "gulp-react": "^3.1.0",
    "gulp-util": "^3.0.7",
    "react": "^0.13.3",
    "react-script-loader": "0.0.1",
    "reactify": "^1.1.1",
    "vinyl-source-stream": "^1.1.0",
    "watchify": "^3.6.1"
  

奇怪的是,我执行“npm install”后,除了依赖项字段列出的模块之外,还安装了其他模块,例如

drwxr-xr-x  14 xxx  wheel   476B Nov 18 18:41 acorn
drwxr-xr-x   7 xxx  wheel   238B Nov 18 18:41 amdefine
drwxr-xr-x   6 xxx  wheel   204B Nov 18 18:41 ansi-green
drwxr-xr-x   6 xxx  wheel   204B Nov 18 18:41 ansi-regex
drwxr-xr-x   6 xxx  wheel   204B Nov 18 18:41 ansi-styles
drwxr-xr-x   6 xxx  wheel   204B Nov 18 18:41 ansi-wrap
drwxr-xr-x   6 xxx  wheel   204B Nov 18 18:41 anymatch
drwxr-xr-x   9 xxx  wheel   306B Nov 18 18:41 archy
drwxr-xr-x   6 xxx  wheel   204B Nov 18 18:41 arr-diff
drwxr-xr-x   6 xxx  wheel   204B Nov 18 18:41 arr-flatten
drwxr-xr-x   5 xxx  wheel   170B Nov 18 18:41 array-differ
drwxr-xr-x   8 xxx  wheel   272B Nov 18 18:41 array-filter
drwxr-xr-x   9 xxx  wheel   306B Nov 18 18:41 array-map
drwxr-xr-x   9 xxx  wheel   306B Nov 18 18:41 array-reduce
drwxr-xr-x   6 xxx  wheel   204B Nov 18 18:41 array-slice
drwxr-xr-x   5 xxx  wheel   170B Nov 18 18:41 array-uniq
drwxr-xr-x   6 xxx  wheel   204B Nov 18 18:41 array-unique
drwxr-xr-x   6 xxx  wheel   204B Nov 18 18:41 arrify
drwxr-xr-x   8 xxx  wheel   272B Nov 18 18:41 asn1.js
drwxr-xr-x  10 xxx  wheel   340B Nov 18 18:41 assert
drwxr-xr-x  10 xxx  wheel   340B Nov 18 18:41 ast-types
drwxr-xr-x   9 xxx  wheel   306B Nov 18 18:41 astw
drwxr-xr-x   9 xxx  wheel   306B Nov 18 18:41 async-each
drwxr-xr-x  11 xxx  wheel   374B Nov 18 18:41 balanced-match
drwxr-xr-x   8 xxx  wheel   272B Nov 18 18:41 base62
drwxr-xr-x   9 xxx  wheel   306B Nov 18 18:41 base64-js
drwxr-xr-x   6 xxx  wheel   204B Nov 18 18:41 beeper
drwxr-xr-x   6 xxx  wheel   204B Nov 18 18:41 binary-extensions
drwxr-xr-x  10 xxx  wheel   340B Nov 18 18:41 bn.js
drwxr-xr-x   7 xxx  wheel   238B Nov 18 18:41 brace-expansion
drwxr-xr-x   7 xxx  wheel   238B Nov 18 18:41 braces
drwxr-xr-x   7 xxx  wheel   238B Nov 18 18:41 brorand
drwxr-xr-x  13 xxx  wheel   442B Nov 18 18:41 browser-pack
drwxr-xr-x   7 xxx  wheel   238B Nov 18 18:41 browser-resolve
drwxr-xr-x  12 xxx  wheel   408B Nov 18 18:41 browserify
drwxr-xr-x  17 xxx  wheel   578B Nov 18 18:41 browserify-aes
drwxr-xr-x   8 xxx  wheel   272B Nov 18 18:41 browserify-cipher
drwxr-xr-x   7 xxx  wheel   238B Nov 18 18:41 browserify-des
drwxr-xr-x   8 xxx  wheel   272B Nov 18 18:41 browserify-rsa
drwxr-xr-x  16 xxx  wheel   544B Nov 18 18:41 browserify-sign
drwxr-xr-x   8 xxx  wheel   272B Nov 18 18:41 browserify-zlib
drwxr-xr-x  11 xxx  wheel   374B Nov 18 18:41 buffer
drwxr-xr-x  11 xxx  wheel   374B Nov 18 18:41 buffer-xor

对此有任何提示吗?我的 NPM 坏了吗?或者我没有以正确的方式写package.json

【问题讨论】:

【参考方案1】:

没有错,NPM 现在会将所有依赖项安装到根模块文件夹,除非存在版本冲突。您看到的所有其他模块都是您安装的模块的依赖项。

来自NPM 3.0.0 release notes:

您的依赖项现在将安装到最大平面。在可能的情况下,您的所有依赖项及其依赖项以及它们的依赖项都将安装在项目的 node_modules 文件夹中,没有嵌套。只有当两个(或更多)模块具有冲突的依赖关系时,您才会看到相互嵌套的模块。

【讨论】:

嗨,亚历克斯:谢谢。似乎 NPM 试图让事情变得干净和独立?它只是让我的几个测试项目变大了。 ^_^. 感谢@Alexander 澄清这一点。我想知道将所有依赖项存储在项目中而不是在临时目录中缓存那些不是“特定于项目”的依赖项有什么好处...... 我把 webpack 放到 node_modules 目录下,npm install webpack 得到 341 个包。你的意思是 webpack 依赖 341 个包? @inherithandle 是的。它目前在 package.json 中列出了 22 个直接依赖项,但这些包也依次依赖于其他包,这些包也依赖于其他包,依此类推。【参考方案2】:

我希望 Alexander O'Mara 的回答对您有所帮助如果您仍然想要或想要使用旧版本等依赖项的人

你可以使用

npm install --legacy-bundling

如果你总是想使用

npm set legacy-bundling=true

并且使用可以照常运行

npm 安装

【讨论】:

以上是关于执行“npm install”后安装了太多 npm 模块的主要内容,如果未能解决你的问题,请参考以下文章

node升级后npm install不能安装新版本

执行npm -install -g vue-cli 和 npm install -g cnpm --registry=https://registry.npm.taobao.org时保错

npm install说明

npm init,npm -y, npm install --save,npm install --save-dev

vue项目中npm install安装失败,万能解决方法

vue项目中npm install安装失败,万能解决方法