您好,登錄后才能下訂單哦!
這篇文章主要講解了“Serverless中怎么使用typescript + nodejs進(jìn)行開發(fā)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Serverless中怎么使用typescript + nodejs進(jìn)行開發(fā)”吧!
前言
首先介紹下在本文出現(xiàn)的幾個比較重要的概念:
函數(shù)計(jì)算(Function Compute):函數(shù)計(jì)算是一個事件驅(qū)動的服務(wù),通過函數(shù)計(jì)算,用戶無需管理服務(wù)器等運(yùn)行情況,只需編寫代碼并上傳。函數(shù)計(jì)算準(zhǔn)備計(jì)算資源,并以彈性伸縮的方式運(yùn)行用戶代碼,而用戶只需根據(jù)實(shí)際代碼運(yùn)行所消耗的資源進(jìn)行付費(fèi)。函數(shù)計(jì)算更多信息參考。 Aliyun Serverless VSCode Extension: 是阿里云 Serverless 產(chǎn)品 函數(shù)計(jì)算 Function Compute 的 VSCode 插件,該插件結(jié)合了 函數(shù)計(jì)算 Funcraft:Funcraft 工具以及 函數(shù)計(jì)算 SDK ,是一款 VSCode 圖形化開發(fā)調(diào)試函數(shù)計(jì)算以及操作函數(shù)計(jì)算資源的工具。 Funcraft:Funcraft 是一個用于支持 Serverless 應(yīng)用部署的工具,能幫助您便捷地管理函數(shù)計(jì)算、API 網(wǎng)關(guān)、日志服務(wù)等資源。它通過一個資源配置文件(template.yml),協(xié)助您進(jìn)行開發(fā)、構(gòu)建、部署操作。Fun 的更多文檔參考。
目標(biāo)
本文打算以一個簡單的 Serverless 函數(shù)計(jì)算項(xiàng)目為例,嘗試使用 typescript + nodejs 進(jìn)行開發(fā),搭建一個簡單的工程項(xiàng)目,實(shí)現(xiàn)如下小目標(biāo):
使用 typescript 編寫業(yè)務(wù)代碼
可以通過 Serverless VSCode 插件本地調(diào)試 typescript 代碼
通過插件將項(xiàng)目代碼部署到云端
項(xiàng)目示例圖
實(shí)踐
1. 前期準(zhǔn)備 (可選)
在 VSCode 插件市場中搜索 Aliyun Serverless 插件并安裝。
根據(jù) aliyun/fun 中的教程安裝并配置 Docker。
前期準(zhǔn)備的目的是為了方便開發(fā)和調(diào)試,目前阿里云 Function Compute 提供了命令行工具 Funcraft 以及圖形化 VSCode 插件。安裝 Docker 是為了在本地模擬線上環(huán)境進(jìn)行調(diào)試,如果想快速瀏覽下 nodejs + typescript 工程項(xiàng)目的搭建,可以跳過。
2. 環(huán)境搭建
配置 tsconfig.json
執(zhí)行 tsc --init,將會在項(xiàng)目根目錄生成 tsconfig.json
配置 tsconfig.json 內(nèi)容為:
{ "compilerOptions": { "target": "es5", "module": "commonjs", "noImplicitAny": true, "outDir": "./dist/", "sourceMap": true }, "include": [ "./src" ] }
配置 package.json
執(zhí)行 npm init,將會在項(xiàng)目根目錄生成 package.json
配置 package.json 內(nèi)容為:
{ "name": "fc-ts", "version": "1.0.0", "description": "Function Compute + Typescript", "main": "index.js", "scripts": { "compile": "tsc -p ./" } }
編寫業(yè)務(wù)代碼
新建 src/index.ts 文件,編寫內(nèi)容如下:
export const handler = ( event: any, context: any, callback: (err: any, data: any) => void, ) => { console.log(new String(event)); callback(null, 'hello world'); }
將 ts 代碼編譯為 js 代碼
在 Terminal 中輸入 npm run compile
完成后在項(xiàng)目根目錄會有 dist 文件夾以及 dist/index.js、dist/index.js.map 文件
至此,我們搭建了一個常規(guī)的 typescript 項(xiàng)目,有 tsconfig.json、package.json、src 源碼目錄、dist 結(jié)果目錄。其中,src/index.ts 文件中定義了一個 handler 方法,該方法符合函數(shù)計(jì)算中函數(shù)入口方法的定義。
3. 結(jié)合函數(shù)計(jì)算
在項(xiàng)目根目錄新建 index.js 文件,文件內(nèi)容如下: const { handler } = require('./dist/index'); module.exports.handler = (event, context, callback) => { handler(event, context, callback); } 這里又定義了一個 handler 方法,該方法中調(diào)用了編譯后 js 文件中的 handler 方法。
在項(xiàng)目根目錄新建 template.yml 文件,文件內(nèi)容如下: ROSTemplateFormatVersion: '2015-09-01' Transform: 'Aliyun::Serverless-2018-04-03' Resources: demo: # service name Type: 'Aliyun::Serverless::Service' Properties: Description: This is FC service func01: # function name Type: 'Aliyun::Serverless::Function' Properties: Handler: index.handler Runtime: nodejs8 CodeUri: ./ MemorySize: 1024 Timeout: 15 該文件中對我們的資源(即函數(shù)計(jì)算中的服務(wù)以及函數(shù))進(jìn)行了定義,具體內(nèi)容可以參考: Fun 規(guī)范文檔。 如果安裝了 Serverless VSCode 插件,那么可以嘗試下插件的智能提示,效果如圖:
至此,我們就成功的將 typescript 項(xiàng)目結(jié)合到了函數(shù)計(jì)算中。我們的做法是:將 typescript 源碼文件放置在 src 目錄,將編譯后的 js 文件放置在 dist 目錄,最后在項(xiàng)目根目錄中編寫了 index.js 文件,文件中的 handler 處理函數(shù)調(diào)用了編譯后 index 文件的入口函數(shù)。
4. 本地調(diào)試與部署
本地調(diào)試
在 index.js 以及 src/index.ts 文件中插入一些斷點(diǎn)。
點(diǎn)擊 VSCode 左側(cè)欄目中的函數(shù)計(jì)算圖標(biāo),展開本地資源樹
點(diǎn)擊函數(shù)名右側(cè)的調(diào)試按鈕,即可調(diào)試 ts 源代碼。
部署函數(shù)
點(diǎn)擊 VSCode 左側(cè)欄目中的函數(shù)計(jì)算圖標(biāo)
右鍵本地資源樹中的函數(shù)名,點(diǎn)擊部署按鈕
遠(yuǎn)端調(diào)用函數(shù)
點(diǎn)擊遠(yuǎn)端資源樹中函數(shù)名右側(cè)的調(diào)用按鈕
感謝各位的閱讀,以上就是“Serverless中怎么使用typescript + nodejs進(jìn)行開發(fā)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Serverless中怎么使用typescript + nodejs進(jìn)行開發(fā)這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。