【问题标题】:How to specify npm version when deploying nodejs apps to bluemix?将nodejs应用程序部署到bluemix时如何指定npm版本?
【发布时间】:2015-05-04 18:45:09
【问题描述】:

我在我的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+?

【问题讨论】:

    标签: node.js npm ibm-cloud


    【解决方案1】:

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

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

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

    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"
    },
    

    【讨论】:

    • 是的,这就是为什么我说它通过 heroku buildpack 在 heroku 上工作。
    【解决方案2】:

    我也可以使用 Node 0.12.2 来实现这个功能,但做了以下更改:

    在 package.json 中:

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

    【讨论】:

    • 是的,我可以在 bluemix 上获取范围包!谢谢!
    • 值得注意的是,这仍然有效。一个更现代的例子:“engines”:{“npm”:“>=6.14”,“节点”:“>=12.22”},
    【解决方案3】:

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

    如果您不想恢复并使用 cf 社区 buildpack,您可以使用“engines.npm”属性,这应该可以让您启动并运行,即使在节点 0.10.x 中也是如此。

    在 package.json 中,指定:

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

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

    【讨论】:

    • 此功能属于Bluemix 默认node.js buildpack,我想知道默认nodejs buildpack 中的哪个更改带来了此功能,而不是只说“它现在可以工作”。
    • @shawnzhu,为了清楚起见,我更新了我的答案。看起来,Bluemix node.js 默认构建包的特性现在支持指定“engines.npm”>2.0 并且现在可以使用范围内的 npm 包。我不确定他们改变了什么,但我在这里添加了我的答案,b/c 上面 sai-vennam 的答案似乎已经过时了。
    • 它今天不起作用,@Sai Vennam 提到 bluemix 上当前的生产 Node.js buildpack 版本是 v1.18-20150519-1759,尚不支持此功能。重新接受他的回答。我会一直关注这个
    猜你喜欢
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    相关资源
    最近更新 更多