Skip to content

ChouUn/tstl-mono

Repository files navigation

TSTL Monorepo Demo

演示如何使用 TypeScriptToLua + pnpm workspace 构建多包 monorepo,并通过 luaBundle 打包为单个 Lua 文件。

目录结构

tstl-mono/
├── packages/
│   ├── pkg-a/              # 基础库(数学工具、日志、格式化)
│   ├── pkg-b/              # 单位系统(依赖 pkg-a)
│   ├── pkg-c/              # 主入口(依赖 pkg-a + pkg-b + pkg-engine-api,luaBundle 打包)
│   ├── pkg-engine-api/     # 引擎 API 类型声明(纯 .d.ts,Global + Module 双模型)
│   ├── e2e-engine-api/     # 引擎 API 的 E2E 测试(Lua stubs)
│   └── test-utils/         # 共享测试工具(transpile + Lua WASM execute)
├── docs/                   # 项目文档
├── biome.json              # Biome 代码质量配置
├── vitest.config.ts        # Vitest 测试配置
├── tsconfig.base.json      # 共享编译选项
└── pnpm-workspace.yaml

依赖关系

pkg-c ──→ pkg-b ──→ pkg-a
  ├───────────────→ pkg-a
  └───────────────→ pkg-engine-api

e2e-engine-api ──→ dist/bundle.lua (构建产物)

使用

pnpm install
pnpm build            # 构建 pkg-c → dist/bundle.lua
pnpm e2e:engine-api   # 通过 Lua stubs 运行 bundle

代码质量

pnpm check            # Biome: 格式化 + lint + import 排序(一条命令全搞定)
pnpm format           # Biome: 仅格式化
pnpm lint             # Biome: 仅 lint
  • Biome 2.x 统一处理格式化、lint 和 import 排序
  • simple-git-hooks 在每次 commit 前自动运行 biome check --staged

测试

pnpm test             # Vitest: 运行所有单元测试
  • Vitest 4.x + lua-wasm-bindings — 通过 TSTL 编译 TS,在 Lua 5.3 WASM VM 中执行编译产物并断言结果
  • 测试位于各包的 __tests__/ 目录(Vue/Babel 模式)

关键设计

  • 采用 源码编译 模式:pkg-c 通过 tsconfig.jsonpaths 直接引用 pkg-a/pkg-b 的 TypeScript 源码,而非编译产物
  • pkg-a/pkg-b 不单独构建,它们的 tsconfig.json 仅供 IDE 使用
  • pkg-engine-api 提供 Global + Module 双模型 的引擎 API 类型声明,通过 noResolvePaths 实现运行时动态加载
  • 目标环境:Lua 5.3(Warcraft III)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors