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

时间:2015-05-04 18:45:10

标签: node.js npm ibm-cloud

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

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

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

目前在部署到heroku时可以正常工作,它将npm升级到v2.7.x.但是,cf push到bluemix失败,控制台输出显示:

registry "@shawnzhu/mybot" not found.

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

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

3 个答案:

答案 0 :(得分:5)

Before June 15, 2015: This was not possible using the default Node.js buildpack on Bluemix, yet. For now, you can use the community open-source Node.js buildpack:

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

You've specified the npm version in your package.json correctly, so it should work for the community buildpack.

After June 15, 2015: The newest version of the IBM Node.js Buildpack is now available on Bluemix! You can see the full changes at https://developer.ibm.com/bluemix/2015/06/15/bluemix-node-js-buildpack-update/

This buildpack comes with the ability to specify NPM versions by including an "npm" entry in your package.json, like so:

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

答案 1 :(得分:1)

我还能够使用Node 0.12.2进行此操作,并进行了以下更改:

在package.json中:

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

答案 2 :(得分:1)

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

如果您不想还原并使用cf社区buildpack,则可以使用“engines.npm”属性,这样即使在节点0.10.x中也可以启动并运行。

在package.json中,指定:

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

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