「デプロイ」という git ブランチに と がnpm-shrinkwrap.json
あります。package.json
私のサーバーでは、この展開ブランチを github からフェッチしてマージします。これにより、サーバーに最新の展開バージョンがあることが保証されます。
node_modules バイナリなどは出荷されていないため、プロジェクト リポジトリがサーバーからプルされた後、サーバー側でも実行npm install
する必要があります。npm update
これが私が使用することにした理由ですnpm shrinkwrap
。ただし、これnpm-shrinkwrap.json
をメインフォルダーに入れて実行npm install
しても、シュリンクラップされたjsonファイルがこれらをロックしていても、サブモジュールの新しいバージョンがインストールされます。npmはshrinkwrapファイルを見ていないようです。
なぜこれが起こるのか、そしてこの状況を解決する方法を誰か説明できますか?
これはの一部ですpackage.json
:
"dependencies" : {
"eventemitter2" : "0.4.9",
"after" : "0.4.1",
"express" : "2.5.9"
},
"devDependencies" : {
"mocha" : ">= 1.0.3 < 2",
"should" : ">= 0.6.3 < 1",
"request" : ">= 2.9.202 < 3",
"commander" : ">= 0.6.0 < 1"
},
一方npm-shrinkwrap.json
、
{
"name": "appname",
"version": "0.0.1",
"dependencies": {
"eventemitter2": {
"version": "0.4.9"
},
"after": {
"version": "0.4.1"
},
"express": {
"version": "2.5.9",
"dependencies": {
"connect": {
"version": "1.8.7",
"dependencies": {
"formidable": {
"version": "1.0.9"
}
}
},
"mime": {
"version": "1.2.4"
},
"qs": {
"version": "0.4.2"
},
"mkdirp": {
"version": "0.3.0"
}
}
},
"commander": {
"version": "0.6.0"
},
"should": {
"version": "0.6.3"
},
"request": {
"version": "2.9.202"
}
}
}
それでも、実行すると、バージョン 0.4.2 からバージョン 0.5.0npm install
に更新されました。また、 1.2.5qs
にアップデートしました。mime
なぜこれをしたのですか?
はこれnpm install
を返しました:
qs@0.5.0 ./node_modules/express/node_modules/connect/node_modules/qs
mime@1.2.5 ./node_modules/express/node_modules/connect/node_modules/mime
興味深いことに、シュリンクラップにはこれらのいずれも含まれていません。これが問題だと思います。問題は、なぜこれらが含まれていなかったのかということです。