簡體   English   中英

為 Google Cloud App Engine 靈活指定 Node.js 版本

[英]Specifying Node.js version for Google Cloud App Engine Flexible

我正在嘗試部署 GCloud App Engine 靈活服務。 我有一個 yaml 文件,其中包含 Node.js 運行時和指定的env

runtime: nodejs
env: flex

正如文檔所說“您可以使用engines 字段在應用程序的package.json 文件中指定不同的Node.js 版本。”,我還在package.json添加了以下內容:

"name": "@bindr/dev",
"version": "1.0.0",
"engines": {
  "node": ">=14.0.0"
},

但是,當我運行gcloud app deploy ,出現以下錯誤:

error @bindr/dev@1.0.0: The engine "node" is incompatible with this module. Expected version ">=14.0.0". Got "12.19.0"

似乎部署過程沒有考慮到engines屬性,因為即使我指定了一個無效版本(例如>=18.0.0 )它仍然沒有抱怨,只有yarn install失敗。 如何讓構建過程使用指定的 Node 版本?

我發現我可以在cloudbuild.yaml為構建的某些步驟指定 Node 的版本,如下所示:

steps:
  - name: node:node-14.10.0
    args: ['predeploy.js', 'content-server']
  - name: 'gcr.io/cloud-builders/yarn:node-14.17.1'
    args: ['install']
  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['app', 'deploy']
timeout: '900s'

在此過程中, yarn install步驟成功,但gcloud app deploy步驟在嘗試安裝依賴項時仍然失敗(我找不到如何將節點版本指定為gcr.io/cloud-builders/gcloud ,它沒有'似乎不是這樣的標簽)。

我還檢查了相同的12.19.0版本正在生產實例上運行,因此不僅僅是構建環境具有舊版本。

我究竟做錯了什么?

所以看看這個文檔,特別注意這一行

engine.node 屬性是可選的,但如果存在,該值必須與 app.yaml 文件中指定的 Node.js 版本兼容。 例如:

我相信默認版本是 12(即runtime: nodejs )以在您的app.yaml文件集運行時更正此問題,如下runtime: nodejs14或更高版本

另請記住,次要補丁會自動更新,因此您只能指定主要版本,即 14.XX。此外,如果您指定的版本不可用,則構建過程將失敗。

注意:如果您使用帶有cloudbuild.yaml和 flex 環境的雲構建,您可能會遇到構建錯誤,請將cloudbuild.yaml移動到其自己的文件夾中以防止出現此錯誤,並使用 --config 選項來說明 yaml 的位置。 請參閱此文檔以獲取進一步指導

我遇到了同樣的問題並在這里創建了一個問題。 我懷疑這是 Google App Engine 的錯誤,而不是您的應用程序的錯誤。

作為一種解決方法,我最終為我的應用程序使用了自定義運行時 為此,在您的 GAE 配置文件中,您從runtime: nodejs切換到runtime: custom並將 Dockerfile 添加到您的項目根目錄。 有上寫dockerfile良好的文檔在這里,但這里是一個簡單的,你可以使用:

# syntax=docker/dockerfile:1

FROM node:14.10.0
ENV NODE_ENV=production

WORKDIR /app

COPY ["package.json", "package-lock.json*", "./"]

RUN npm install --production

COPY . .

CMD [ "node", "server.js" ]

您可能還需要一個至少包含node_modules.dockerignore文件。

最終,我認為 GAE 修復會更好,因為在package.json配置您的節點版本會更簡單,就像您應該能夠做到的那樣。 但這應該足以讓事情正常工作並避開似乎是 GAE 錯誤的東西。

總結一下,正如@CharlieA 所提到的,App Engine Flex 環境有一個 Node.js 的默認圖像,目前版本為12.19.01

正如@Cleanbeans 指出的,根據Flex 環境文檔,Node.js 的運行時應在app.yaml指定為runtime: nodejs ,unile 其他語言,您可以在其中指定版本號。 這解釋了為什么盡管指定了版本 14,但引擎仍返回默認版本。

回到@CharlieA 評論,這可以通過在app.yaml使用自定義運行時來修復,如下所示: runtime: custom

或者,嘗試在你的package.json使用一個固定版本,正如這個Github thread 中所討論的那樣。

除了上面提到的 Github 線程之外,@CharlieA 還創建了一個公共問題跟蹤器供 Google 審查。 您可能需要請求文檔更新,詳細說明如何指定 Node.js 版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM