将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的意见。 希望这可以帮助。