對於稍微大型的 Node 應用,typescript
已是標配,它爲 javascript
提供了強類型的鎧甲,有效提升了代碼質量。javascript
這裏是一個結合 ts
及 koa
快速部署到騰訊雲函數計算中的模板。倉庫以下html
使用本模板快速建立應用java
$ serverless install --url https://github.com/shfshanyue/serverless-template-zh/tree/master/tencent-koa-ts --name koa-server
複製代碼
在項目建立早期儘量對 package 進行升級,這裏使用了 npm-check-updates
node
$ npm run ncu
複製代碼
在測試環境中進行開發ios
$ npm run dev
複製代碼
.
├── dist/ # 編譯文件,及最終須要上傳的目錄
├── node_modules/
├── app.ts # 入口文件,必須採用 app 的命名
├── package.json
├── package-lock.json
├── Readme.md
├── serverless.yaml # serverless 配置文件
└── tsconfig.json
複製代碼
app.ts
便是你業務邏輯的入口文件,你能夠像其餘 Koa Application 同樣自由組織路由,業務邏輯,Model 等。git
import Koa from 'koa'
const app = new Koa()
app.use(async (ctx, next) => {
ctx.body = `hello, path: '${ctx.request.path}'`
})
app.listen(3333, () => { console.log('Listening 3333') })
module.exports = app
複製代碼
serverless component
能夠認爲是把 faas 及 baas 資源集合的進一步抽象,該項目採用了 @serverless/tencent-koa
github
koa-app:
component: '@serverless/tencent-koa'
inputs:
region: ap-guangzhou
functionName: koa-function
runtime: Nodejs10.15
code: ./dist
functionConf:
timeout: 60
memorySize: 128
apigatewayConf:
protocols:
- https
environment: release
複製代碼
部署以前須要準備好生產環境所需的 node_modules
以及編譯完成的 js 資源。typescript
# 裝包
$ npm install typescript
# 編譯成 js
$ npm run build
# 打包生產環境的包,並移至 dist 目錄
# predeploy: npm ci --production && rsync -avz node_modules dist/
$ npm run predeploy
# 部署到騰訊雲
$ sls
koa-function [████████████████████████████████████████] 100% | ETA: 0s | Speed: 314.98k/
koa-app:
functionName: koa-function
functionOutputs:
ap-guangzhou:
Name: koa-function
Runtime: Nodejs10.15
Handler: serverless-handler.handler
MemorySize: 128
Timeout: 60
Region: ap-guangzhou
Namespace: default
Description: This is a function created by serverless component
region: ap-guangzhou
apiGatewayServiceId: service-dture22u
url: https://service-dture22u-1257314149.gz.apigw.tencentcs.com/release/
cns: (empty array)
11s › koa-app › done
複製代碼
從日誌能夠看出,部署到騰訊雲只需 11s,仍是很快速npm
在本地直接使用 npm run dev
,在本地端口調試。而在生產環境,使用 sls 部署後日志中提供的 url 進行 http 調用json
$ curl https://service-dture22u-1257314149.gz.apigw.tencentcs.com/release/
hello, path: '/'#
複製代碼
在開始以前,稍微提一下缺點:
log
及 metrics
,須要轉至騰訊雲控制檯查看因爲部署過程稍微複雜,能夠考慮重寫一個關於 ts 的 serverless component