在IBM云的Cloud Foundry平台上使用Node.js的最新版本

使用IBM云的Cloud Foundry时,需要进行一些小的调整来使用Node.js的新版本。

从通过ibmcloud cf push部署时的日志追踪下来,似乎IBM Cloud和Cloud Foundry的文件支持状态稍有不同。

Cloud Foundry最初是独立的,后来被IBM收购,是这样的吧…

如果没有指定Node.js的版本,首先

如果没有指定版本进行部署,将会出现以下警告。

默认似乎是Node.js v10系列。因为它相当老旧,所以会发出警告。

   Downloading app package...
   Downloaded app package (635.9K)
   -----> IBM SDK for Node.js Buildpack v4.6-20210305-2036
          Based on Cloud Foundry Node.js Buildpack 1.7.44
   -----> Installing binaries
          engines.node (package.json): unspecified
          engines.npm (package.json): unspecified (use default)
          **WARNING** Node version not specified in package.json or .nvmrc. See: http://docs.cloudfoundry.org/buildpacks/node/node-tips.html
          Attempting to install: 10.24.0
   -----> Installing node 10.24.0
          Copy [/tmp/buildpacks/73dd77c5b9dcb13eb662490e81ac9cf2/nodejs/dependencies/aaf73e55b7db4c30b2da7af326e10a54/node_10.24.0_linux_x64_cflinuxfs3_db472e29.tgz]
          **WARNING** node 10.x.x will no longer be available in new buildpacks released after 2021-04-01.
          See: https://github.com/nodejs/Release
          Using default npm version: 6.14.11
   -----> Installing yarn 1.22.10

在package.json文件中添加并指定Node.js的版本

**警告** package.jsonまたは.nvmrcでNodeのバージョンが指定されていません。また、2021-04-01以降にリリースされる新しいビルドパックでは、Node 10.x.xが利用できなくなります。このため、バージョンを上げてみてください。

在package.json中添加engines字段。

省略

  "engines": {
    "node": "14.x"
  },

省略

顺便提一下,当我尝试使用v15的时候,我被批评了。看来他们还没有对此进行处理。

**错误** 无法安装 Node :在 [10.23.3 10.24.0 12.20.2 12.21.0 14.15.5 14.16.0] 中找不到 15.x 的匹配项。

只要在manifest.yml文件中指定了buildpacks,就可以使用相对较新的版本。

在编写时,Node.js v15.12.0是最新版本,但是当我在engines中指定15.x时,出现了我之前所写的错误。

只需指定Cloud Foundry的nodejs-buildpack,就可以使用最新版本。

Cloud Foundry的Node.js构建包

看这里的话,在写作时似乎支持到了 Node.js v15.11.0。
(虽然不是最新的,但几乎跟随到了最新版本)

我之前在部署时没有在manifest.yml中指定buildpacks,但是如果按照以下方式指定,可以使用最新版本的https://github.com/cloudfoundry/nodejs-buildpack。(当前支持的版本为Node.js v15.11.0。)

---
applications:
 - name: n0bisuke-testapp
   random-route: true
   memory: 64M
   buildpacks:
    - https://github.com/cloudfoundry/nodejs-buildpack

由于可以使用v15系列,因此在package.json中进行指定。

省略

  "engines": {
    "node": "15.x"
  },

省略

顺便提一下,你可以使用 process.versions 来确认版本信息,我写了下面这段代码。

const express = require('express')
const app = express()

app.get('/', function (req, res) {
  res.send(JSON.stringify(process.versions))
})
const port = process.env.PORT || 3000

app.listen(port)

当我部署并确认后,情况如下。

スクリーンショット 2021-03-24 13.58.00.png

这个版本是v15.11.0对吧。

补充:另一种指定方式

使用IBM Cloud文档中提供的指定方式,可以这样描述,但是使用这种方式应用的版本是v15.7.0,稍微有点旧了。

以下是原文的汉语释义:
请将以下原文以汉语表达,只需要一种选择:

https://cloud.ibm.com/docs/cloud-foundry?topic=cloud-foundry-deploy_apps&locale=ja

---
applications:
 - name: n0bisuke-testapp
   random-route: true
   memory: 64M
   buildpack: nodejs_buildpack

之前我们使用了buildpacks来通过URL进行指定,但这次的区别是通过buildpack来进行指定。

注意事项:部署时间可能较长。

主观感觉来说,我觉得在指定了buildpacks的情况下进行部署比较需要更长的时间。

如果无论是v15系还是v14系都可以的话,可能使用v14系会更快地进行部署,不需要指定 buildpacks。

如果不指定,似乎会下载与Swift构建包无关的内容,并显示出这样的日志。但我拥有一种神秘的感觉,即这种方式可以缩短部署时间。(这只是我的感觉,我没有进行详细调查。)

总结

目前版本的情况是以下的响应状态。

    • 全く指定無し

v10になる

enginesに指定

v14系まで利用可能

manifest.jsonでビルドパック指定

buildpacksでURL指定: v15.11.0まで利用可能
buildpackで名前指定: v15.7.0まで利用可能

广告
将在 10 秒后关闭
bannerAds