開發函數計算的正確姿式——支持 ES6 語法和 webpack 壓縮

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

函數計算(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 工具能夠根據指定的模板快速的建立函數計算應用,快速體驗和開發函數計算相關業務。官方會提供經常使用的模板,用戶也能夠自定本身的模板。node

背景

阿里雲函數計算是事件驅動的全託管計算服務。經過函數計算,您無需管理服務器等基礎設施,只需編寫代碼並上傳。函數計算會爲您準備好計算資源,以彈性、可靠的方式運行您的代碼,並提供日誌查詢、性能監控、報警等功能。藉助於函數計算,您能夠快速構建任何類型的應用和服務,無需管理和運維。並且,您只須要爲代碼實際運行所消耗的資源付費,代碼未運行則不產生費用。webpack

當咱們寫 nodejs 函數時,函數每每會依賴不少第三方依賴,這樣致使函數代碼少則幾十兆,多則上百兆。代碼包太大,會有以下問題:git

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

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

熟悉 nodejs 的同窗應該知道,項目工程化管理工具 webpack,咱們徹底能夠經過 webpack 將 es6 代碼編譯成 es5,而且剪切打包壓縮成一個 js 文件,而後將該 js 文件上傳到函數計算中運行。github

快速開始

我這裏提供了一個 fun 模板,幫助快速搭建一個函數計算 nodejs 項目骨架,支持 es6 代碼編譯成 es5,而且剪切打包壓縮成一個 js 文件,而後將該 js 文件上傳到函數計算中運行。操做做步驟以下:web

1. 安裝 node

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

2. 安裝 fun 工具docker

npm install @alicloud/fun -g

fun 工具的某些子命令可能會用到 docker,因此你須要安裝好 docker,具體參考文檔:Fun 安裝教程npm

3. 經過 fun 模板生成項目骨架bash

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 模板。


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索