指定 Node.js 版本
這個 Buildpack 專案支援 Node.js 的目前和有效的 LTS 版本。舊版 Node.js 也能使用,但可能不會由專案積極維護。
正在使用 package.json
您可以在部署期間,透過在 package.json
中設定 engines.node
欄位,指定應用程式的 Node.js 版本。如要設定 Buildpack,以便在部署應用程式時使用最新版本的 Node.js v16,您可以在 package.json
中使用下列值:
"engines": {
"node": "16.x.x"
}
正在使用 GOOGLE_NODEJS_VERSION
您也可以透過 GOOGLE_NODEJS_VERSION
環境變數指定 Node.js 版本。如果同時設定兩種設定,GOOGLE_NODEJS_VERSION
值會優先於 engines.node
屬性。如果未提供任何值,系統會使用 Node.js 的最新 LTS 版本
如要設定 buildpack 在部署應用程式時使用 Node.js 16,請按照下列步驟操作:
pack build --builder=gcr.io/buildpacks/builder \
sample-functions-framework-node \
--env GOOGLE_NODEJS_VERSION=16.x.x
您也可以使用 project.toml
專案描述元,為專案檔案和環境變數編碼。請參閱使用環境變數建構應用程式的操作說明。
提示
engines.node
欄位可採用 semver 限制。我們在 Node.js 建構包中使用的特定程式庫是 Masterminds/semver- 避免在
engines.node
中使用大於 (>) 指定符 - 將應用程式部署至 App Engine 標準環境時,
engines.node
屬性應與app.yaml
中指定的執行階段相容 - 如要進一步瞭解
package.json
中的engines.node
設定選項,請參閱官方 NPM 說明文件中的「引擎主題」 - 將函式部署至 Cloud Run 函式時,
engines.node
屬性應與用於部署函式的執行階段相容
安裝依附元件
使用 NPM
- NPM 是預設套件管理工具。
- 請盡可能使用
package-lock.json
來改善快取效能。 - 根據預設,系統只會安裝正式環境依附元件。
- 您可以使用
package.json
檔案中的engines.npm
欄位,指定 npm 版本區段。
使用 Yarn
- 如果在專案中加入
yarn.lock
檔案,系統會改用 Yarn。 - 您可以在
package.json
檔案的engines.yarn
欄位中,指定要使用的 Yarn 版本。 - 如果專案包含
.yarn/cache
,我們就會支援 Yarn2 PnP 模式。
使用 Pnpm
- 在專案中加入
pnpm-lock.yaml
檔案時,系統會改用 Pnpm。 - 您可以在
package.json
檔案的engines.pnpm
欄位中指定 pnpm 版本。 - 如需實際範例,請參閱 sample-node-pnpm 應用程式。
使用私人模組
您可以使用私人 npm 模組,方法是在函式目錄的 .npmrc
檔案中提供登錄檔驗證設定。如果您使用 Yarn 2 以上版本做為套件管理工具,這個檔案的名稱會是 .yarnrc.yml
。
Artifact Registry 中的私人模組
Artifact Registry Node.js 套件存放區可代管函式的私人模組。部署 Buildpacks 函式時,建構程序會自動為 Cloud Build 服務帳戶產生 Artifact Registry 憑證。使用 NPM 或 Yarn 1 版時,只需在 .npmrc
檔案中列出 Artifact Registry 存放區。舉例來說,使用 NPM 或 Yarn 1.x 版本時:
@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true
如果您使用的是 Yarn 2 以上版本,只需在 .yarnrc.yml
檔案中列出 Artifact Registry 存放區,無須額外提供憑證。例如:
npmScopes:
SCOPE:
npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
npmAlwaysAuth: true
其他存放區的私人模組
npm 文件說明如何建立自訂唯讀存取憑證。在主目錄中建立的 .npmrc
檔案包含讀取/寫入憑證,因此我們不建議使用。部署期間不需要寫入權限,且這項權限可能會帶來安全風險。
.npmrc
檔案可能會增加函式的部署時間,因此如果您未使用私人存放區,請不要加入這個檔案。
檔案格式
如果您使用 .npmrc
檔案設定自訂驗證權杖,檔案應包含下列程式碼行。
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
取代:
- REGISTRY_DOMAIN:私人 npm 登錄表的網域名稱。舉例來說,如果存放區主機為
npmjs.org
,請將這個欄位設為registry.npmjs.org
。 AUTH_TOKEN:npm 登錄的授權權杖。這可以是符記的文字常值或文字字串
${NPM_TOKEN}
,npm
指令會將其替換為環境中的實際符記值。您可以將
--set-build-env-vars
引數設為gcloud functions deploy
指令的$NPM_TOKEN
環境變數。如要進一步瞭解 NPM 授權權杖,請參閱 NPM 私人模組教學課程。
在部署期間執行自訂建構步驟
根據預設,如果 package.json
檔案中指定了指令碼,系統就會執行 npm run build
。不過,您可以改為指定自訂建構步驟來覆寫預設行為,並只在建構期間執行所需的指令碼。您可以使用 package.json
檔案中的 GOOGLE_NODE_RUN_SCRIPTS
環境變數或 gcp-build
來控制建構步驟。
但請注意,GCDS 和 Google 管理控制台只能擇一使用。請注意,GOOGLE_NODE_RUN_SCRIPTS
環境變數具有優先順序,並會覆寫 gcp-build
在 package.json
中指定的任何內容。
根據預設,在您設定自訂建構步驟時,系統會先安裝 package.json
檔案中的 dependencies
和 devDependencies
,再執行任何指令碼或指令。如要覆寫預設行為,您可以使用 NODE_ENV
環境變數。
正在使用 GOOGLE_NODE_RUN_SCRIPTS
您可以將 GOOGLE_NODE_RUN_SCRIPTS
環境變數傳遞至建構作業,以控管要執行哪些指令碼。您可以指定一或多個指令碼,或者傳遞空白環境變數,以免預設行為 (例如 GOOGLE_NODE_RUN_SCRIPTS=
) 執行。如需完整詳細資料,請參閱「環境變數」。
正在使用 package.json
在 package.json
檔案中新增 gcp-build
只會執行 npm run gcp-build
,也就是會覆寫預設行為。您可以指定一或多個指令,也可以指定空字串,以防止執行任何指令,例如 "gcp-build":""
。
"scripts": {
...
"gcp-build": "npm run lint && npm run build"
...
}
應用程式進入點
Node.js 建構包會執行 package.json
scripts.start
欄位中指定的指令。如果未設定 scripts.start
,Buildpack 會執行 npm start
。
建議您使用 Procfile,因為它會將 npm
或 yarn
從路徑中移除。
環境變數
Node.js 建構包支援下列環境變數,可用於自訂容器。
NPM_CONFIG_<key>
請參閱說明文件。
範例: NPM_CONFIG_FLAG=value
將 -flag=value
傳遞至 npm
指令。
NODE_ENV
指定建構期間的開發環境;設定為 npm install
。
範例: NODE_ENV=development
會同時安裝 package.json
中指定的 dependencies
和 devDependencies
。
GOOGLE_NODE_RUN_SCRIPTS
指定要從 package.json
執行的 npm 指令碼有序清單,以便在安裝依附元件後執行。清單必須以半形逗號分隔,並依照您列出每個指令碼的順序執行。
指定 GOOGLE_NODE_RUN_SCRIPTS
時,系統只會執行您列出的指令碼。舉例來說,如果您想避免預設 npm run build
執行,請指定不含值的環境變數。
範例:
GOOGLE_NODE_RUN_SCRIPTS=lint,build
會先執行npm run lint
,再執行npm run build
。GOOGLE_NODE_RUN_SCRIPTS=
不會執行任何指令碼。