3

我正在将我的 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"
    },

我浏览了整个收缩包装文件,并从每个依赖项声明中删除了“来自”部分,然后我设法上传了我的应用程序,它可以工作。

所以我的问题是,我如何使用旧版本的 npm shrinkwrap 才能获得所需的 shrinkwrap.json 版本?

Appfog 支持告诉我我需要使用 1.1.21 版本,但我没有成功安装它。

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

4

3 回答 3

1

试试这个:

npm install https://github.com/npm/npm/archive/v1.1.21.tar.gz
node ./node_modules/npm/bin/npm-cli.js shrinkwrap
于 2014-05-01T22:00:31.090 回答
1

如果你只想使用旧版本的 npm,你可以通过 npm 安装它(我知道这听起来很奇怪,但它可能)

npm install npm@1.1.21

编辑:所以你尝试安装一个不存在的 npm 版本。赶紧跑

npm view npm

并查看属性version,看看您可以通过 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 ,完成收缩包装后切换回您当前的节点版本.

解决方案 2

您可以设置某种 grunt/gulp-task(我希望您使用其中之一)来运行 grunt/gulp shrinkwrap,它会生成您的 shrinkwrap.json(通过 npm shrinkwrap),完成后会清理您的 shrinkwrap.json

于 2014-05-02T20:44:45.130 回答
1

另一个可能更简单的解决方案是只包含node_modules在您的存储库中。

相关:在 Heroku 上创建 node.js 应用程序时,我应该将 node_modules 签入 git 吗?

于 2014-05-03T21:35:44.137 回答