本章面向第一次接触 lhx-kit 的开发者。五分钟让你跑起来一个 MPA 页面;深一点的架构与决策请读 🧠 架构总览。
| 依赖 | 版本 | 说明 |
|---|---|---|
| Node.js | >= 18.18.0 |
ESM / fetch / ReadableStream 已稳定;jiti 依赖现代 createRequire 语义 |
| pnpm | >= 9 |
monorepo 使用 workspace:* 协议;pnpm-workspace.yaml 声明 apps/* / packages/* / examples/* |
| Git | >= 2.30 |
可选。CLI 的 --git 选项会调用,不装也不影响其他功能 |
:::details 为什么不支持 Node 16 / 仅使用 npm?
jiti@2 要求 createRequire 的 CJS interop 语义,这是 Node 18.18 才完整稳定的pnpm-workspace.yaml 的 workspace:* 协议 npm 不识别(需要 npm workspaces 语法改写)packageManager 字段真的要在 npm 下使用:锁 packageManager: "npm@10.x",删除 pnpm-workspace.yaml,把每个 workspace:* 改为文件系统路径或发 npm。不推荐。
examples(vmpa / rmpa)通过 workspace:* 引用 @lhx-kit/config 等包。pnpm 只建软链,不帮你 build。@lhx-kit/config 的 main 指向 dist/index.js,如果没 build,examples 启动时会抛:
所以 clone 下来第一件事永远是 pnpm --filter '@lhx-kit/*' build。后续改包源码时用 pnpm --filter '@lhx-kit/<包名>' dev(tsup watch 模式)即可。
CLI 会问你下面这些问题:
create 背后做了什么?:::tip 为什么不用 giget / degit?
早期版本尝试过通过 giget 从 GitHub 拉模板,但:
templates/ 一起打进去,npx lhx-cli 下来就能用所以最终决定把模板放进 CLI 包内部(packages/cli/templates/),走本地 fs-extra.copy。
两个示例共享同一套 @lhx-kit/vite-plugin / @lhx-kit/runtime / @lhx-kit/renderer;差异仅在:
其他所有构建行为(per-page chunk / CDN loader / offline 打包)完全一致。
这一条命令一次性生成:
同时 AST 级 更新 project.config.ts:
早期我们用字符串正则在 pages: { 后面插一行——踩了三个坑:
pages:{...} 无空格写法,regex 直接 miss换成 ts-morph 之后,它把 TS 源码 parse 成 AST,在 PropertyAssignment 层面插值:
零踩坑,保留用户所有原有格式 / 注释 / 行尾风格。
如果图没渲染,检查 rspress.config.ts 里是否设置了 builderConfig.plugins 或升级到 rspress@1.x 以上。本站已包含。
推荐按顺序阅读: