我在名为“部署”的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"
}
}
}
然而,当我运行npm install
时,它将qs
从版本0.4.2更新为版本0.5.0。此外,它将mime
更新为1.2.5。为什么这样做?
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
有趣的是,收缩包装不包含这些。我想这就是问题所在。现在问题是为什么它不包含这些。
答案 0 :(得分:5)
您的npm-shrinkwrap.json
不包含qs的连接版本。在生成收缩包裹之前,您应该npm install
。