使用特定版本的npm shrinkwrap

时间:2014-04-26 11:18:34

标签: javascript node.js npm appfog shrinkwrap

我正在将我的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版,但我没有成功安装它。

请询问是否缺少某些信息。

3 个答案:

答案 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?