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

我创build了一个node.js应用程序,在我的package.json有运行时依赖的范围包 :

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

我也有一个自定义.npmrc指向我的私人npmregistry范围@shawnzhu

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

 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推送mynodeapp -b https://github.com/cloudfoundry/nodejs-buildpack

你已经正确的在你的package.json中指定了npm版本,所以它应该适用于社区buildpack。

2015年6月15日之后 :Bluemix上现已提供最新版本的IBM Node.js Buildpack! 您可以在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来实现这个function,并做了以下修改:

在package.json中:

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

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

如果你不想恢复和使用cf社区的buildpack,你可以使用“engines.npm”属性,即使在节点0.10.x中也可以启动和运行。

在package.json中,指定:

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

为了清晰起见,我编辑了这个答案。 非常感谢@shawnzhu的意见。 希望这可以帮助。