我在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 +?
答案 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的评论。希望这会有所帮助。