将 nodejs 应用程序部署到 bluemix 时如何指定 npm 版本?

How to specify npm version when deploying nodejs apps to bluemix?

我在 package.json 中创建了一个 node.js 应用程序,其运行时依赖性为 scoped packages:

"dependencies": {
    "@shawnzhu/mybot" : "latest",
    ...
},
"engines": {
    "npm": ">2.0.0",
    "node": "0.10.38"
},

我还有一个自定义 .npmrc,它将范围 @shawnzhu 指向我的私有 npm 注册表。

目前它在部署到 heroku 时有效,它将 npm 升级到 v2。7.x。但是,对 bluemix 的 cf push 失败,控制台输出显示:

registry "@shawnzhu/mybot" not found.

查看整个控制台输出后,我意识到它使用 npm v1.4.28,它不支持范围包。

如何在 bluemix 的 node.js 应用程序中获取 npm v2.0.0+?

2015 年 6 月 15 日之前:在 Bluemix 上使用默认的 Node.js buildpack 是不可能的。目前,您可以使用社区开源 Node.js buildpack:

cf push mynodeapp -b https://github.com/cloudfoundry/nodejs-buildpack

您在 package.json 中正确指定了 npm 版本,因此它应该适用于社区构建包。

2015 年 6 月 15 日之后:IBM Node.js Buildpack 的最新版本现已在 Bluemix 上可用!您可以在 https://developer.ibm.com/bluemix/2015/06/15/bluemix-node-js-buildpack-update/

查看完整的更改

此 buildpack 能够通过在 package.json 中包含一个“npm”条目来指定 NPM 版本,如下所示:

"engines": {
    "npm": "xxxxxxx"
},

我还能够使用 Node 0.12.2 来实现此功能,并进行了以下更改:

在package.json中:

  "engines": {
    "npm": ">2.0.0",
    "node": ">=0.12.0"
  },

从最新的 Bluemix node.js 默认构建包(c.Jun 4, 2015)开始,您可以指定 npm >2.0.0 的版本,这将安装 npm >2.7 的版本,这是支持和导入范围内的 npm 包的要求。我已经针对一个公共范围的包测试了它,它已经启动并且 运行 在 Bluemix 的生产中,使用默认的 node.js 构建包。

如果你不想恢复和使用 cf 社区构建包,你可以使用 "engines.npm" 属性,这应该会让你起床 运行,即使在节点中0.10.x.

在package.json中指定:

 "engines": {
    "npm": ">2.0.0",
    "node": "0.10.x"
  }

为了清楚起见,我已经编辑了这个答案。非常感谢@shawnzhu 的评论。希望这有帮助。