我正在将我的node.js应用程序部署到Appfog,但由于他们的安装脚本无法解析npm-shrinkwrap.json,整个部署过程都会失败。
今天shrinkwrap.json中的示例依赖关系看起来像这样
"async": {
"version": "0.2.10",
"from": "async@0.2.10", <--- This line breaks install script at appfog
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
},
我浏览了整个shrinkwrap文件并从每个依赖声明中删除了“from”部分,我设法上传了我的应用程序,并且它有效。
所以我的问题是,我如何使用旧版本的npm shrinkwrap,这样我才能得到我需要的shrinkwrap.json版本?
Appfog支持告诉我我需要使用1.1.21版,但我没有成功安装它。
请询问是否缺少某些信息。
答案 0 :(得分:1)
试试这个:
npm install https://github.com/npm/npm/archive/v1.1.21.tar.gz
node ./node_modules/npm/bin/npm-cli.js shrinkwrap
答案 1 :(得分:1)
如果你只是想使用旧版本的npm,你可以通过npm安装它(我知道这听起来很奇怪,但它可能)
npm install npm@1.1.21
编辑:所以你试着安装一个不存在的npm版本。跑吧
npm view npm
并查看属性版本,了解您可以通过npm安装哪些版本。
您将看到注册表中不存在1.1.21,这意味着您应该尝试通过github安装它(请参阅@sakai的回答)。
然后你会看到下一个问题。您使用的是node@0.10.26,npm 1.1.21可能与node@0.10.x不兼容。
所以我自己基本上看到了两种可能的解决方案:
解决方案1:
使用n(或者nvm来回切换节点版本。您可以尝试安装node@0.8.x版本并尝试在那里安装npm@1.1.21,并且完成后使用shrinkwrapping切换回当前节点版本。
解决方案2
你可以设置某种grunt / gulp-task(我希望你使用其中之一)来运行grunt / gulp shrinkwrap,它会生成你的shrinkwrap.json(通过npm shrinkwrap)并在完成后清理你的shrinkwrap.json
答案 2 :(得分:1)
另一种可能更简单的解决方案是在您的回购中加入node_modules
。
相关:Should I check in node_modules to git when creating a node.js app on Heroku?