1. 程式人生 > >開發函式計算的正確姿勢——支援 ES6 語法和 webpack 壓縮

開發函式計算的正確姿勢——支援 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 連上來,並開始除錯呢?如下圖所示:

8. 部署函式到雲端

部署函式的時候需要用到 AK 等下資訊,可以通過 fun config 來配置,如果配置過請忽略,部署函式命令如下:

fun deploy

小結

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


原文連結
本文為雲棲社群原創內容,未經