对于稍微大型的 Node 应用,typescript 已经是标配,它为 javascript 提供了强类型的铠甲,有效提高了代码质量。
这里是一个结合 ts 及 koa 快速部署到腾讯云函数计算中的模板。仓库如下
shfshanyue/serverless-template-zh: 中国云厂商 serverless framework 模板及示例 (更快的访问速度)
如果你只想搭建一个博客
使用 Netlify 托管静态网站与持续集成
使用 AliOSS 部署及加速你的静态网站
Github Actions 持续集成简介及实践
使用 Serverless Framework 开发第一个云函数
使用 serverless Component 开发第一个 Koa 应用
快速使用
使用本模板快速创建应用
$ serverless install --url github。com/shfshanyue/serverless-template-zh/tree/master/tencent-koa-ts --name koa-server
复制代码
在项目创建早期尽可能对 package 进行升级,这里使用了 npm-check-updates
$ npm run ncu
复制代码
在测试环境中进行开发
$ npm run dev
复制代码
文件结构
.
├── dist/ # 编译文件,及最终需要上传的目录
├── node_modules/
├── app.ts # 入口文件,必须采用 app 的命名
├── package.json
├── package-lock.json
├── Readme.md
├── serverless.yaml # serverless 配置文件
└── tsconfig.json
复制代码
app.ts
app.ts 即是你业务逻辑的入口文件,你可以像其他 Koa Application 一样自由组织路由,业务逻辑,Model 等。
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
serverless component 可以认为是把 faas 及 baas 资源集合的进一步抽象,该项目采用了 @serverless/tencent-koa
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 资源。
装包
$ 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: service-dture22u-1257314149.gz.apigw.tencentcs。com/release/
cns: (empty array)
11s › koa-app › done
复制代码
从日志可以看出,部署到腾讯云只需 11s,还是很快速
Http 调用
在本地直接使用 npm run dev,在本地端口调试。而在生产环境,使用 sls 部署后买手机游戏日志中提供的 url 进行 http 调用
$ curl service-dture22u-1257314149.gz.apigw.tencentcs。com/release/
hello, path: '/'#
复制代码
缺点
在开始之前,稍微提一下缺点:
部署麻烦,需要先编译 ts 至 js,并且仅上传生产环境需要的 node_modules (全部上传速度过慢)
在本地不支持 log 及 metrics,需要转至腾讯云控制台查看
由于部署过程稍微复杂,可以考虑重写一个关于 ts 的 serverless component