天天看點

開發函數計算的正确姿勢——支援 ES6 文法和 webpack 壓縮

首先介紹下在本文出現的幾個比較重要的概念:

函數計算(Function Compute): 函數計算是一個事件驅動的服務,通過函數計算,使用者無需管理伺服器等運作情況,隻需編寫代碼并上傳。函數計算準備計算資源,并以彈性伸縮的方式運作使用者代碼,而使用者隻需根據實際代碼運作所消耗的資源進行付費。函數計算更多資訊  參考

Fun: Fun 是一個用于支援 Serverless 應用部署的工具,能幫助您便捷地管理函數計算、API 網關、日志服務等資源。它通過一個資源配置檔案(template.yml),協助您進行開發、建構、部署操作。Fun 的更多文檔 

2.0 版本的 Fun,在部署這一塊做了很多努力,并提供了比較完善的功能,能夠做到将雲資源友善、平滑地部署到雲端。但該版本,在本地開發上的體驗,還有較多的工作要做。于是,我們決定推出 Fun Init 彌補這一處短闆。

Fun Init: Fun Init 作為 Fun 的一個子指令存在,隻要 Fun 的版本大于等于 2.7.0,即可以直接通過 

fun init

 指令使用。Fun Init 工具可以根據指定的模闆快速的建立函數計算應用,快速體驗和開發函數計算相關業務。官方會提供常用的模闆,使用者也可以自定自己的模闆。

背景

阿裡雲函數計算是事件驅動的全托管計算服務。通過函數計算,您無需管理伺服器等基礎設施,隻需編寫代碼并上傳。函數計算會為您準備好計算資源,以彈性、可靠的方式運作您的代碼,并提供日志查詢、性能監控、報警等功能。借助于函數計算,您可以快速建構任何類型的應用和服務,無需管理和運維。而且,您隻需要為代碼實際運作所消耗的資源付費,代碼未運作則不産生費用。

當我們寫 nodejs 函數時,函數往往會依賴很多第三方依賴,這樣導緻函數代碼少則幾十兆,多則上百兆。代碼包太大,會有如下問題:

  1. 可能會導緻沒法成功上傳代碼到函數計算服務,因為函數計算服務對代碼包大小是有限制的,壓縮後最大不能超過 50 MB,解壓後最大不能超過 250 MB
  2. 會導緻冷啟動時間是變大,因為下載下傳代碼的過程變大了
  3. 每次更新代碼時間變大

另外,函數計算目前隻支援 nodejs8 和 nodejs6 這兩個版本,這兩版本不支援 es6 文法,但是我們可能已經寫習慣了 es6 文法該怎麼辦呢?

熟悉 nodejs 的同學應該知道,項目工程化管理工具 webpack,我們完全可以通過 webpack 将 es6 代碼編譯成 es5,并且剪切打包壓縮成一個 js 檔案,然後将該 js 檔案上傳到函數計算中運作。

快速開始

我這裡提供了一個 fun 模闆,幫助快速搭建一個函數計算 nodejs 項目骨架,支援 es6 代碼編譯成 es5,并且剪切打包壓縮成一個 js 檔案,然後将該 js 檔案上傳到函數計算中運作。操作作步驟如下:

1. 安裝 node

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bash
nvm install 8           

2. 安裝 fun 工具

npm install @alicloud/fun -g           

fun 工具的某些子指令可能會用到 docker,是以你需要安裝好 docker,具體參考文檔:

Fun 安裝教程

3. 通過 fun 模闆生成項目骨架

fun init -n demo https://github.com/muxiangqiu/fc-skeleton-nodejs8.git           

項目生成好後,在根目錄下有個 README.md 檔案,閱讀該檔案可以幫你快速了解項目骨架為你做了什麼,以及相關的指令。具體詳情:

README.md

4. 安裝依賴

cd demo # 切換到項目根下面,後面的所有指令,都是在項目根下面執行
npm install           

注意:有少數特殊 npm 子產品的安裝可能會依賴目前系統環境,為了能正确安裝函數運作時的系統環境的 npm 子產品,可以通過

fun install

 指令來實作,比如 puppeteer,具體參考:

開發函數計算的正确姿勢 —— 安裝第三方依賴

5. 編譯

# 生産編譯
npm run build
# 開發編譯(這種編譯方式不會進行代碼混淆,并且生成 source map 資訊,友善開發調試)
npm run dev           

6. 本地運作函數

fun local invoke demo/demo           

7. 運作調試函數

運作調試之前,請先用

npm run dev

  指令編譯源碼,然後以調試的方式運作函數:

fun local invoke -d 3000 demo           

程式會提示你輸入函數的 event,如果你不需要輸入,可以按

ctrl+d

 跳過輸入,接下來,并不會繼續往下執行,隻有 vs code 的連接配接上來後,程式才會繼續執行。如何通過 vs code 連上來,并開始調試呢?如下圖所示:

開發函數計算的正确姿勢——支援 ES6 文法和 webpack 壓縮

8. 部署函數到雲端

部署函數的時候需要用到 AK 等下資訊,可以通過

fun config

 來配置,如果配置過請忽略,部署函數指令如下:

fun deploy           

小結

通過函數項目工程化,可以讓我們的函數代碼體積變得更加小,代碼可能由 100 MB 左右降到 KB 級别,不管是冷啟動延時,還是代碼的更新上傳效率,都有了極大的提升。另外,你也可以根據你自己的業務場景定義你自己的 fun 模闆。

相關連結

繼續閱讀