如何建立一个免费网站,代理注册公司赚钱吗,加工平台v型架子,东莞网站推广教程typescript 支持与本地调试
typescript 支持与本地调试 前言支持 typescript函数的本地调试 启用 node-terminal 调试invoke localserverless-offline Next Chapter完整示例及文章仓库地址
前言
在上一章节#xff0c;我们创建了一个 hello world 函数#xff0c;并把它顺…
typescript 支持与本地调试
typescript 支持与本地调试 前言支持 typescript函数的本地调试 启用 node-terminal 调试invoke localserverless-offline Next Chapter完整示例及文章仓库地址
前言
在上一章节我们创建了一个 hello world 函数并把它顺利的部署到了AWS云上。然而真正上生产的函数项目肯定不会这么简单。
对于一个现代的 nodejs 项目来说我们还有许多的需求
比如我们也更想使用 typescript 来进行开发还有我们也需要在本地搭建一套完整的模拟环境来对我们编写的代码进行调试和测试。
比如我们要添加对应的单元测试和 CI/CD
又或者是我们的函数里面各种第三方的依赖项的处理js 相关的还好但是其他那些和平台绑定的 二进制文件又或者是内置的 .xdb 等等一些数据文件应该如何处理呢请听我娓娓道来.
支持 typescript
我们想要用 ts 来编写函数进行调试和部署幸运的是 serverless 为我们提供了开箱即用的插件
serverless-plugin-typescript, 这是由 serverless 官方维护的 ts 支持方案推荐使用serverless-esbuild这是第三方编写的使用 esbuild 去编译 ts 代码的方案 当然除了插件方案之外当然也有非 serverless 插件的传统打包方案即直接使用 tsc 或者 webpack/rollup/esbuild 又或者进一步封装的 tsup/unbuild 等等这些工具直接构建出 dist 产物然后 sls deploy 直接部署 dist 里代码文件的方案。 这个传统打包方案我们下一篇文章《serverless nodejs 项目打包最佳实践》会详细介绍。 这些插件的用法非常简单我们只需要在安装它们之后再把它们注册进你的 serverless.yml 文件中就可以了。
比如 serverless-plugin-typescript, 我们先安装 npm i -D serverless-plugin-typescript
然后在 serverless.yml 中注册:
# 注册插件传入一个数组
plugins:- serverless-plugin-typescript
# 插件传入的 options 都在这个字段下
custom:# 可以不传值不传默认值见 https://www.npmjs.com/package/serverless-plugin-typescriptserverlessPluginTypescript:tsConfigFileLocation: ./tsconfig.build.json接下来执行 sls packge 命令(sls deploy的前置打包成压缩包步骤)插件就会自己去找当前目录下的 tsconfig.build.json上面tsConfigFileLocation指定的路径配置去编译 ts 代码然后打入将被上传的压缩包里。
打包后你可以在你配置的 tsconfig 里 outDir 目录下找到编译生成的结果并进行校验。
函数的本地调试
我们本地环境去调试编写的云函数比较方便的做法主要有 2 种
一种为执行 sls invoke local -f function name -d/-p ... 进行直接调试另外一种为通过 serverless-offline 插件在本地构建出模拟的 lambda 和 api网关环境 进行调试显然这种调试方式非常适合 web 服务。 注意因为整个项目是 typescript 编写的而实际运行却是 js 文件所以你编译时必须打开 sourcemap 选项才能命中到 ts源码里的断点不然只能把断点命中到 .build/.esbuild 里 js 产物的代码。 启用 node-terminal 调试
这个方式很简单因为 node-terminal 开箱即用的 一种方法我们直接在 vscode 下方的终端窗口点击加号旁边的下拉icon添加 JavaScript 调试终端然后再cd到目标目录中执行对应的调试 npm script 即可。 另外一种方法是利用 .vscode/launch.json 去维护我们的调试脚本同时在 vscode debug 界面进行调试。
配置类似于下方
{version: 0.2.0,configurations: [{command: npm run invoke:local,name: [hello-world] invoke local,request: launch,type: node-terminal,cwd: ${workspaceFolder}/apps/hello-world},{command: npm run offline,name: [hello-world] offline,request: launch,type: node-terminal,cwd: ${workspaceFolder}/apps/hello-world}]
}下方章节的 invoke local 和 serverless-offline 都直接使用上述的 vscode 配置示例进行调试。
invoke local
sls invoke local -f function name -d/-p ... 这个命令是直接调用本地函数进行调试.
其中 function name 是函数名也就是我们在 serverless.yml 中注册的名字。
后面加的 -d/-p 用来控制传入的 event 对象。
-d 是 --data 的缩写代表直接把跟在后面的字符串作为 json 传入函数进行调用。
而 -p(--path的缩写)其实功能类似不过 -p 是传入一个 json 文件的路径作为参数读取之后传入函数进行调用所以我更推荐使用 -p。
serverless-offline
serverless-offline 插件是在本地模拟出一个 lambda 和 API Gateway 的环境进行部署再起一个 http server 监听端口这样来进行调试。
这种调试方法其实和我们调试 express/koa 项目是非常类似的。不同的是我们的路由不在我们的代码里进行注册而在于 serverless.yml 里函数对应网关的配置。
serverless-offline 插件注册也非常的简单:
# 注册插件
plugins:- serverless-offlinecustom:
# 修改配置项serverless-offline:noPrependStageInUrl: truenoAuth: true注册完成之后使用 sls offline 命令即可启动看到:
Offline [http for lambda] listening on http://localhost:3000
Function names exposed for local invocation by aws-sdk:* hello: aws-http-api-ts-dev-hello┌─────────────────────────────────────────────────────────────────────────┐│ ││ GET | http://localhost:3000/ ││ POST | http://localhost:3000/2015-03-31/functions/hello/invocations ││ │└─────────────────────────────────────────────────────────────────────────┘Server ready: http://localhost:3000 出现上述结果代表已经启动完成此时它的调试也只需要像我们调试 express/koa/nest 那样直接在 vscode 里打断点即可命中。
Next Chapter
现在你已经学会了如何在本地调试代码和用 typescript 来编写函数了。
下一篇《依赖项的处理与层的创建与注册》中将会详细解释依赖项的处理欢迎阅读。
完整示例及文章仓库地址
https://github.com/sonofmagic/serverless-aws-cn-guide
如果你遇到什么问题或者发现什么勘误欢迎提 issue 给我