- 别名 DoasRootOfMyLife -
请完整阅读本文,否则您的游戏可能会出现奇奇怪怪的 bug。
doas-cli/
├── src/
│ ├── index.tsx — 入口:章节菜单 → 创建 GameEngine → 渲染 <App>
│ ├── components/
│ │ └── App.tsx — 终端 UI:启动动画、输出回滚、输入行、历史记录
│ ├── engine/
│ │ ├── engine.ts — 核心引擎:命令注册、分词器、故事状态机、ask/echo/lock
│ │ ├── parser.ts — 标记解析器:[color:]、[progress]、[runCommand] → OutputLine[]
│ │ └── storage.ts — 文件持久化,存储于 ~/.doas-root-of-mylife/
│ └── chapters/
│ ├── pre.ts — 序章
│ ├── first.ts — 第一章
│ └── second.ts — 第二章
├── bundle/ — ncc 打包产物
├── bundle-cjs/ — ncc CJS 打包产物
├── package.json
├── tsconfig.json
├── launcher.cjs
└── sea-config.json
运行时 :Node.js
语言 :TypeScript
UI 框架 :Ink(终端版 React)
构建 :tsc(编译)→ ncc(单文件打包)→ pkg(Windows .exe)
src/index.tsx — 入口:章节菜单 → 创建 GameEngine → 渲染 <App>
src/components/App.tsx — 终端 UI:启动动画、输出回滚、输入行、历史记录
src/engine/engine.ts — 核心引擎:命令注册、分词器、storyWhere 状态机、ask/echo/lock
src/engine/parser.ts — 标记解析器:[color:]、[progress]、[runCommand] → OutputLine[]
src/engine/storage.ts — 文件持久化,存储于 ~/.doas-root-of-mylife/
src/chapters/*.ts — 章节定义:每个文件调用 engine.newCommand() 注册命令
npm run build # 仅 tsc 编译
npm run start # tsc + 运行(等同于 dev)
npm run dev # tsc + 运行
npm run bundle # ncc 构建(单文件打包)
npm run exe # pkg → dist/doas.exe(Windows x64)
npm run make # tsc + bundle + exe(完整流水线)