本文以安裝第三方依賴emoji為例,介紹如何為您的Node.js代碼安裝依賴,打包代碼並部署至Function Compute。
準備工作
建立一個用於測試的代碼目錄,如
mycode。Linux或macOS系統
您可以執行
mkdir -p /tmp/mycode建立。Windows系統
在任意位置建立檔案夾,並將其命名為
mycode即可。
在mycode目錄下,建立
index.mjs或者index.js代碼檔案。程式碼範例如下。
ES模組
說明此樣本僅支援運行在Node.js 18及以上版本的運行時環境。
// index.mjs 'use strict'; import * as emoji from 'node-emoji' export const handler = async (event, context) => { console.log('hello world'); return emoji.get(':unicorn:'); }CommonJS模組
// index.js 'use strict'; var emoji = require('node-emoji') exports.handler = (event, context, callback) => { console.log('hello world'); callback(null, emoji.get(':unicorn:')); }
使用npm安裝依賴並部署代碼
前提條件
您的本機已安裝npm,且具有執行npm命令的許可權。
您已在Function Compute控制台建立Node.js函數。具體操作,請參見建立事件函數。
操作步驟
在
mycode目錄下執行npm install node-emoji安裝emoji依賴庫到目前的目錄。打包
mycode目錄下的所有檔案。Linux或macOS系統
進入
mycode目錄,執行zip code.zip -r ./*。說明請確保您具有該目錄的讀寫權限。
Windows系統
進入
mycode目錄,選中所有檔案,單擊滑鼠右鍵,選擇打包為ZIP包。
說明請確保您建立的
index.js檔案位於包的根目錄。在Function Compute控制台找到目標函數,然後在函數詳情頁面的代碼頁簽,單擊右上方上傳代碼上傳您上一步打包的ZIP包,上傳完成後,單擊測試函數驗證代碼正確性。
由於Function Compute的運行環境是Linux系統,您在Windows系統或macOS系統安裝emoji依賴庫時如果帶有二進位檔案,會導致您的程式碼封裝上傳到Function Compute後運行失敗。因此,建議您使用WebIDE打包函數第三方依賴或者使用Serverless devs工具安裝依賴並部署專案。
使用Serverless devs工具安裝依賴並部署專案
前提條件
操作步驟
執行
cd /tmp/mycode進入mycode目錄。新增
s.yaml檔案。編寫檔案內容樣本如下。
edition: 3.0.0 name: fcDeployApp access: "default" vars: # 全域變數 region: "cn-hangzhou" resources: hello_world: component: fc3 # 組件名稱 props: region: ${vars.region} # 關於變數的使用方法,可以參考:https://docs.serverless-devs.com/serverless-devs/yaml#%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC functionName: "emoji" description: 'this is emoji' runtime: "nodejs18" code: ./ handler: index.handler memorySize: 128 timeout: 30新增
package.json檔案。編寫檔案內容如下。
{ "dependencies": { "node-emoji": "^1.11.0" } }執行
sudo s build --use-docker安裝依賴。執行完成後,會在
mycode目錄下產生一個.s目錄,依賴被安裝到.s/build/artifacts/{functionName}目錄下。執行
sudo s deploy部署專案。執行完成後,即可部署函數到Function Compute。
重要說明
當您使用自訂運行時Node.js語言,並且啟動命令執行的是編譯後的可執行檔時,直接在WebIDE修改原始碼將不會生效,因為實際啟動並執行仍是舊的可執行檔。為了使代碼修改生效,您需要在本地更新代碼後重新編譯、打包,並上傳程式碼封裝到WebIDE,然後重新執行函數。
更多資訊
如果您的程式碼封裝過大,可以將依賴分離出來,構建層掛載,上傳的代碼只保留業務代碼即可。具體操作,請參見以下文檔。