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

12

我的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文件。

2个回答

17

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

根据NPM 3.0.0发布说明

现在您的依赖关系将被最大限度地平铺安装。尽可能地,您的所有依赖项及其依赖项以及它们的依赖项将安装在项目的node_modules文件夹中,而不带任何嵌套。只有当两个(或多个)模块存在冲突依赖项时,才会看到模块互相嵌套。


嗨,Alex: 谢谢。看起来NPM试图让事情变得清晰和独立?这只是让我的几个测试项目变得更大了。^_^。 - Charlie Chen
谢谢你澄清这个问题,@Alexander。我想知道将所有依赖项存储在项目内的好处是什么,而不是将那些不是“特定于项目”的缓存到临时目录中... - tftd
我使用 npm install webpack 命令将 webpack 安装到 node_modules 目录中,然后得到了 341 个包。你是不是想说 webpack 依赖于这 341 个包? - inherithandle
@inherithandle 是的。目前在 package.json 中列出了 22 个直接依赖项,但这些包也会依次依赖其他包,而这些包可能还会依赖其他包,以此类推。 - Alexander O'Mara

1
我希望Alexander O'Mara的回答对您有所帮助。如果您仍然想要,或者其他人想要使用旧版本之类的依赖项, 您可以使用下面的命令:
npm install --legacy-bundling
如果您始终想要使用旧版本,可以执行以下步骤:
npm set legacy-bundling=true 然后像往常一样运行以下命令:
npm install

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接