断点调试

断点调试可以找到更难发现的 bug,也方便看到代码的真实逻辑,以及各项数据的变化情况

使用 @halsp/cli 可以更方便的调试项目,下面的教程均使用了 @halsp/cli

如果当前没有使用 @halsp/cli,也可以根据后面的 新增 CLI 部分配置 @halsp/cli

注意

Serverless 环境下(@halsp/lambda, @halsp/alifc 等),默认是使用 @halsp/native 模拟 Http 环境启动应用

如果不需要,删除 native.ts 文件即可

开始调试

@halsp/cli 创建的项目已经配置好调试环境,否则需要参考 新增 CLI 配置

如果使用的是 vscode 可以直接按下 F5 开始调试

其他编译器可以执行下面语句开始调试

npm start
# 或已全局安装 @halsp/cli
halsp start
# 或已在项目内安装 @halsp/cli
npx halsp start

入口文件

建议 src 目录下,有以下两个文件

  1. index.ts 入口文件
  2. startup.ts,导出一个函数,函数返回 Startup 派生类实例对象

这样的好处是方便切换环境,如 lambda 项目通过增加一个 native 入口文件,即可本地模拟调试

CLI 生成的内容示例

使用 CLI 生成的项目已有这两个文件(根据选择插件不同,生成的内容也不同)

startup.ts 内容如

import { Startup } from "@halsp/core";
import "@halsp/mva";
import "@halsp/env";
import "@halsp/logger";

export default <T extends Startup>(startup: T) =>
  startup
    .useEnv()
    .useConsoleLogger()
    .useMva();

index.ts 如果选择 lambda 环境内容如下

const app = startup(new LambdaStartup());
export const main = (event: any, context: any) => app.run(event, context);

使用 native 本地模拟调试的入口文件 native.ts 文件内容如下

import { NativeStartup } from "@halsp/native";
import setupStartup from "./startup";

async function bootstrap() {
  const startup = setupStartup(new NativeStartup().useHttpJsonBody());
  await startup.dynamicListen();
}
bootstrap();

指定入口文件

默认入口文件按以下顺序查找

  • native.ts
  • index.ts
  • main.ts

通过参数 --startupFile 可以指定入口文件,如

halsp start --startupFile demo.ts

已有项目新增 CLI

如果当前项目没有 @halsp/cli,可以参考以下步骤配置

安装

确保已在项目内安装或全局安装 @halsp/cli

# 项目中安装
npm install @halsp/cli -D

# 或 全局安装
npm install @halsp/cli -g

添加脚本

修改 package.json 文件,添加运行脚本

  "scripts": {
    "start": "halsp start",
    "build": "halsp build"
  },

增加调试配置

在项目下创建 .vscode/launch.json 文件

用于配合 vscode 的断点调试

{
  "version": "0.2.0",
  "configurations": [
    {
      "command": "npm start",
      "name": "Halsp Http Debugger",
      "request": "launch",
      "type": "node-terminal"
    }
  ]
}

创建入口文件

按建议创建文件 startup.tsindex.ts

参考 入口文件

开始调试

上述配置完毕

按下 F5 即可开始断点调试

CLI 调试命令

参考 CLI 脚手架 的文档