nodejsのパッケージマネージャーであるnpmの最新版(まだ安定版でない)であるnpm@3を使ってみました。
地味に嬉しいのが
npm install -g npm
でこけたときにnpm本体が消えなくなったそうです。昔、npm本体が消え去ったときは何が起こったかわかりませんでした。
わかりやすい変更点としては,npmでインストールされるモジュールはそれが依存しているモジュールをそのディレクトリ配下に持ちます。
依存されているモジュールはさらに、そのディレクトリ配下に依存しているモジュールを持ちます。
なので、階層が深くなってしまう上に、同じモジュールを持っていることもあります。
これがnpm@3だと上手い具合に依存関係を整理してくれてnode_modeules配下へ並列に全部配置してくれます。階層が浅くなる上に、ダブっているモジュールもなくなります。バージョンが問題になるときなどは配下に持つようにしたりして上手く管理しているとのことです。
で、実際に使ってみました。下記が自分がとあるところで使っているpackage.jsonです。
[javascript]
{
"name": "test",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"aws-sdk": "^2.1.39",
"body-parser": "~1.13.2",
"compression": "^1.5.1",
"config": "^1.15.0",
"cookie-parser": "~1.3.5",
"debug": "~2.2.0",
"express": "~4.13.1",
"hbs": "~3.1.0",
"log4js": "^0.6.25",
"morgan": "~1.6.1",
"multiparty": "^4.1.2",
"request": "^2.60.0",
"serve-favicon": "~2.3.0"
}
}
[/javascript]
これをnpm@3でインストールしてみると。
npm install
ls node_modules/
accepts fd-slicer on-finished
amdefine finalhandler on-headers
ansi-regex forEachAsync optimist
ansi-styles forever-agent parseurl
array-flatten form-data path-to-regexp
asn1 forwarded pend
assert-plus fresh process-nextick-args
async generate-function proxy-addr
aws-sdk generate-object-property qs
aws-sign2 graceful-readlink range-parser
basic-auth handlebars raw-body
bl har-validator readable-stream
bluebird has-ansi request
body-parser hawk sax
boom hbs semver
bytes hoek send
caseless http-errors sequence
chalk http-signature serve-favicon
combined-stream iconv-lite serve-static
commander inherits sntp
compressible ipaddr.js source-map
compression is-my-json-valid statuses
config is-property string_decoder
content-disposition isarray stringstream
content-type isstream strip-ansi
cookie json-stringify-safe supports-color
cookie-parser jsonpointer tough-cookie
cookie-signature log4js tunnel-agent
core-util-is media-typer type-is
cryptiles merge-descriptors uglify-js
ctype methods underscore
debug mime unpipe
delayed-stream mime-db util-deprecate
depd mime-types utils-merge
destroy minimist vary
ee-first morgan walk
escape-html ms wordwrap
escape-string-regexp multiparty xml2js
etag negotiator xmlbuilder
express node-uuid xtend
extend oauth-sign
npm2の方でインストールすると
npm install
ls node_modules/
aws-sdk compression debug hbs
morgan request body-parser cookie-parser
express log4js multiparty serve-favicon
となり全然違います!
node_modulesのサイズはnpm@3の方が
du -s node_modules/
32728 node_modules/
npm2が
du -s node_modules/
36576 node_modules/
どれくらい重複しているかどうかに依存しますが、そこそこサイズが小さくなっています。当然ファイル数も少なくなっているはずですし、なかなかいい感じですね。