1

「デプロイ」という 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

興味深いことに、シュリンクラップにはこれらのいずれも含まれていません。これが問題だと思います。問題は、なぜこれらが含まれていなかったのかということです。

4

1 に答える 1

5

npm-shrinkwrap.jsonconnect のバージョンの qs は含まれていません。npm installシュリンクラップを生成する前に行う必要があります。

于 2012-05-20T11:51:06.687 に答える