npm修剪删除使用的软件包,留下build立中断。 有什么select?

我用npm 3.8.6注意到节点5/6中的奇怪行为或npm prune :它删除了用过的包,并且破坏了构build。

这里是dep.list:

  "dependencies": { "browser-sync": "^2.11.1", "browserify": "^13.0.0", "coffee-script": "^1.9.3", "coffeeify": "^2.0.1", "cson": "^3.0.2", "fastclick": "^1.0.6", "gulp": "github:gulpjs/gulp#4.0", "gulp-git": "^1.7.0", "gulp-uglify": "^1.2.0", "gulp-util": "^3.0.6", "howler": "github:goldfire/howler.js#2.0", "minimatch": "^3.0.0", "nouislider": "^8.2.1", "parcelify": "^2.1.0", "q": "^1.4.1", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0", "watchify": "^3.7.0" }, 

新鲜安装的结果:

 ┌(~/Sites/test_client)─(16 files, 280b) └> nvm use v5 Now using node v5.11.0 (npm v3.8.6) ┌(~/Sites/test_client)─(16 files, 280b) └> npm cache clean ┌(~/Sites/test_client)─(16 files, 280b) └> rm -rf node_modules/ ┌(~/Sites/test_client)─(15 files, 280b) └> npm i > fsevents@1.0.12 install /Users/metalim/Sites/test_client/node_modules/fsevents > node-pre-gyp install --fallback-to-build [fsevents] Success: "/Users/metalim/Sites/test_client/node_modules/fsevents/lib/binding/Release/node-v47-darwin-x64/fse.node" is installed via remote test_client@1.0.0 /Users/metalim/Sites/test_client ├── browser-sync@2.12.5 ├── browserify@13.0.0 ├── coffee-script@1.10.0 ├── coffeeify@2.0.1 ├── cson@3.0.2 ├── fastclick@1.0.6 ├── gulp@4.0.0-alpha.2 (git://github.com/gulpjs/gulp.git#b4d89c391b40cd29e8526e0391981eef67cfccab) ├── gulp-git@1.7.1 ├── gulp-uglify@1.5.3 ├── gulp-util@3.0.7 ├── howler@2.0.0-beta12 (git://github.com/goldfire/howler.js.git#db831e03cf696d1ca5cfdd8f87d66e66da2c5029) ├── minimatch@3.0.0 ├── nouislider@8.5.1 ├── parcelify@2.1.0 ├── q@1.4.1 ├── vinyl-buffer@1.0.0 ├── vinyl-source-stream@1.1.0 └── watchify@3.7.0 

之后:

 ┌(~/Sites/test_client)─(16 files, 280b) └> npm prune unbuild archy@1.0.0 unbuild align-text@0.1.4 unbuild center-align@0.1.3 unbuild findup-sync@0.3.0 unbuild flagged-respawn@0.3.2 unbuild formidable@1.0.17 unbuild interpret@1.0.1 unbuild lazy-cache@1.0.4 unbuild liftoff@2.2.1 unbuild lodash._getnative@3.9.1 unbuild lodash.isarguments@3.0.8 unbuild lodash.isarray@3.0.4 unbuild lodash.sortby@4.4.2 unbuild longest@1.0.1 unbuild mute-stdout@1.0.0 unbuild matchdep@1.0.1 unbuild lru-cache@2.7.3 unbuild os-homedir@1.0.1 unbuild pretty-hrtime@1.0.2 unbuild rechoir@0.6.2 unbuild right-align@0.1.3 unbuild semver-greatest-satisfied-range@1.0.0 unbuild semver-regex@1.0.0 unbuild sigmund@1.0.1 unbuild stack-trace@0.0.9 unbuild tildify@1.2.0 unbuild v8flags@2.0.11 unbuild wordwrap@0.0.2 unbuild wreck@6.3.0 unbuild user-home@1.1.1 

构build被破坏。 怎么了? 这是npm错误吗?

经过一些testing后,我发现npm prune只能在v5之前的节点版本(npm v3)中运行:v4.4.3(npm v2.15.1)及以下版本。 基本上它不适用于在npm v3中引入的平面依赖列表。

什么是平板依赖列表的npm prune替代清理未使用的模块?

回答我自己。

问题出在npm confignpm prune意外的依赖–depth选项。 如果你使用npm config set depth 0来清理你输出的npm ls命令, npm prune会在npm v3 +中被破坏。 它似乎采取了深入的select,并在平面依赖列表上惨败。

所以,解决这个问题是: npm config delete depth

之后, npm prune工作得很好。