【发布时间】:2012-06-28 20:40:34
【问题描述】:
我有一个带有npm-shrinkwrap.json 签入的Node.js 应用程序。当我在本地运行npm install 时,它会安装npm-shrinkwrap.json 中指定的版本,但是当我将它推送到Heroku(在Cedar 堆栈上)时,它似乎忽略了收缩包装,只是安装了最新版本。
我做错了吗?我不需要签到node_modules,对吗?
【问题讨论】:
我有一个带有npm-shrinkwrap.json 签入的Node.js 应用程序。当我在本地运行npm install 时,它会安装npm-shrinkwrap.json 中指定的版本,但是当我将它推送到Heroku(在Cedar 堆栈上)时,它似乎忽略了收缩包装,只是安装了最新版本。
我做错了吗?我不需要签到node_modules,对吗?
【问题讨论】:
正如您在回答中所说,当 Heroku 编写 Nodejs buildpack 时,npm shrinkwrap 功能不存在。
但是,从版本 1.1.2 开始,npm install 首先尝试 npm-shrinkwrap.json,然后回退到 package.json。这意味着 Heroku 尊重它(即使 Heroku 编写代码时尚未构思该功能)。艾萨克太棒了。
所以只需添加到您的package.json:
"engines": {
"node": "0.8.x",
"npm": ">=1.1.2"
}
然后运行npm shrinkwrap 和git add npm-shrinkwrap.json。然后正常提交。
【讨论】:
事实证明,Heroku 目前使用 npm 1.0.106,但根据 changelog,shrinkwrap 仅在 npm 1.1.2 中添加。
添加node_modules 解决了我的问题,直到 Heroku 升级他们的 npm。
【讨论】:
"engines": {"npm": ">=1.1.2"} ,Heroku 的 npm 将尊重 npm-shrinkwrap.json(如果存在)。