在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)
当我部署并确认后,情况如下。
这个版本是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まで利用可能