Azure Functions 支援多種建置選項,將你的 TypeScript 應用程式發佈到 Azure。 根據你的本地環境、應用程式相依性、TypeScript 編譯需求以及執行時需求來選擇建置方法。
選擇建構方法
| 因數 | 本地組裝(建議) | 遠端建構 |
|---|---|---|
| 最適合用於 | 複雜的組裝、monorepo、自訂工具 | 簡單的專案,快速部署 |
| 封裝大小 | 較大(包含 node_modules) |
較小(相依性已安裝於 Azure) |
| TypeScript 編譯 | 你在本機編譯 | Azure 會自動編譯 |
| 原生二進位相容性 | 必須符合目標架構 | 自動處理(Linux x64) |
| 建置逾時風險 | 無(在您的電腦上執行) | 對於大型依賴集合來說是可能的 |
| 管理 | 完整版(適用於任何建構工具、打包工具或最佳化工具) | 僅限於平台預設 |
關於私人 npm 套件或自訂登錄檔,請參見 自訂相依關係。
打包你的應用程式以供部署
在將 TypeScript 函式應用程式部署到 Azure 時,你的部署套件必須符合以下要求:
需要 JavaScript 輸出:Azure Functions 執行 JavaScript,因此 TypeScript 必須在部署前或部署期間編譯。
根目錄層級
host.json:確保部署套件的根目錄只有一個host.json檔案,不置於子資料夾中。package.jsonmain欄位:函式執行時會在啟動時讀取此欄位以定位並索引你的函式。 它必須指向你編譯的 JavaScript 入口點(例如,dist/src/index.js)。排除開發檔案:使用檔案
.funcignore來排除不必要的部署檔案,如此範例所示:.git/ .vscode/ local.settings.json test/ .env tsconfig.json src/ node_modules/
在規劃部署時,也請考慮以下取捨:
- 建置環境必須與生產環境相符:原生二進位的相依關係必須為 Linux x64 架構建置。 遠端建置 會自動處理這部分;本地 建置時,可以考慮使用 Docker 或容器化建置環境。
- 部署套件大小會影響冷啟動:大型相依組合會增加冷啟動延遲,因為執行時必須逐個載入每個檔案。 用 esbuild 或 webpack 這類工具將應用程式打包成較少的檔案,能大幅縮短啟動時間。
- 遠端建置有逾時限制:若相依安裝或 TypeScript 編譯超過平台限制,建置即告失敗。 對於大型專案,請使用搭配預先建置相依套件的本機建置
- 模組初始化有時間限制:Node.js 模組載入與啟動時的功能索引皆有時間限制。 盡量減少頂層匯入或使用動態匯入。
本機組建
如果你沒有明確要求進行遠端建置,你的機器會安裝相依性並編譯 TypeScript。 接著,將整個已編譯的專案及相依項目在本機打包,並部署到你的函式應用程式中。
本地建置會讓套件上傳量更大,但讓你完全掌控建置過程,並確保與開發環境相容。
對於使用本地編譯的 TypeScript 專案:
- 預編譯 TypeScript:部署前先在本地編譯 TypeScript 程式碼。
-
安裝相依套件:在本機執行
npm install或yarn install,以安裝相依套件。 - 建置驗證:確保您的建置輸出在本地環境中正常運作。
- 部署編譯輸出:部署已編譯的 JavaScript 及相依關係。
本地建置的建置指令範例:
# Install dependencies
npm install
# Compile TypeScript
npm run build
# or
tsc
# Deploy with local build (no remote compilation)
func azure functionapp publish <APP_NAME> --no-build
你可以設定以下工具來使用本地建置:
-
Azure Functions Core Tools:使用
func azure functionapp publish和--no-build標誌。 -
AZ CLI:
az functionapp deployment source config-zip -
透過 GitHub Actions 進行持續交付:對於
remote-buildFlex Consumption 計畫,將參數設為false,或對於專用計畫,將scm-do-build-during-deployment和enable-oryx-build設為false。
遠端組建
使用 遠端建置時,Functions 平台負責套件安裝、TypeScript 編譯,並確保與遠端執行環境相容。
使用遠端編譯後,部署套件較小,因為不需要包含 node_modules 或編譯的 JavaScript 檔案。
當你使用遠端建置部署 TypeScript 專案時:
-
自動偵測:平台會依據是否存在
tsconfig.json來偵測 TypeScript 專案。 - 編譯:平台會根據你專案的 TypeScript 設定來編譯 TypeScript 檔案。
-
相依性安裝:平台會從
dependencies同時安裝devDependencies和package.json,因為編譯需要使用建置時套件,例如typescript。 - 優化:平台僅在最終部署套件中包含必要的檔案。
你可以在使用下列工具發佈 TypeScript 應用程式時,使用遠端建置:
-
Azure Functions 核心工具:此
func azure functionapp publish指令需要旗--build-remote=true標來啟用 Node.js 應用程式的遠端建置。 -
AZ CLI:
az functionapp deployment source config-zip需要該--build-remote=true旗標來啟用 Node.js 應用程式的遠端建置。 - Visual Studio Code: Azure 函式:部署到 Azure...... 指令總是使用遠端建置。
-
使用 GitHub Actions 進行持續交付:當彈性使用量計畫的 參數設為
remote-build時,或 Dedicated 計畫的true與scm-do-build-during-deployment參數設為enable-oryx-build時,trueAction 會使用遠端建置。
若要啟用其他情境的遠端建置,例如 使用 Azure Pipelines 的持續交付,請參見 啟用遠端建置。
自訂相依性
Azure Functions 支援自訂與私人 npm 依賴,透過自訂 npm 登錄、私有套件或本地套件來實現。
遠端建置並使用自訂 npm 登錄檔
當您的私有套件可透過自訂 npm 登錄庫取得時,您可以在設定登錄庫位置後要求遠端建置。
要使用自訂登錄檔,請在你的專案根目錄中建立一個 .npmrc 檔案:
registry=https://your-private-registry.com/
//your-private-registry.com/:_authToken=${NPM_TOKEN}
本地套件與私有模組
在建置 TypeScript Azure 函式應用程式時,支援本地套件與私有模組。
若要使用 遠端建置包含本地套件,請在你的 package.json 檔案中引用它們:
{
"dependencies": {
"@azure/functions": "^4.0.0",
"my-private-package": "file:../my-private-package",
"another-local-package": "file:./packages/local-lib"
}
}
若要使用 本機建置納入本機相依性,請先在本機安裝這些相依性,並在停用遠端建置的情況下部署:
# Install all dependencies including local ones
npm install
# Build your TypeScript project
npm run build
# Publish with local build
func azure functionapp publish <APP_NAME> --no-build
使用工作區套件
對於 monorepo 或 npm 工作區設定,請在檔案 package.json 中使用 npm workspaces 來參考共享套件:
{
"name": "functions-app",
"dependencies": {
"@azure/functions": "^4.0.0",
"@mycompany/shared-lib": "workspace:*"
},
"workspaces": [
"packages/*"
]
}
部署前先打包
使用像 webpack、esbuild 或 rollup 這類打包工具,在部署前建立一個單一的套件包:
# Bundle your application
npm run bundle
# Deploy the bundled output
func azure functionapp publish <APP_NAME> --no-build