html本身不支持monorepo管理,因其无依赖解析和模块机制;实际需借助pnpm workspace等工具,将含index.html的子项目(如文档站、示例页)纳入统一仓库,并通过vite等构建工具输出可部署产物,html仅作为最终消费端。

HTML 本身不支持 monorepo 管理 —— 它不是构建系统,也没有包概念。真正要做的,是用前端工程化工具(如 pnpm + workspace)管理含 HTML 的多包项目,比如静态站点、组件库示例页、微前端子应用等。
为什么不能直接“HTML 做 monorepo”
HTML 是标记语言,没有依赖解析、模块加载或工作区机制。所谓“HTML monorepo”,实际指:多个含 index.html 的子项目(如文档站、演示页、独立应用)被纳入同一仓库,并通过统一工具链协同开发与构建。
- 直接双击打开
index.html无法加载import的 ES 模块(缺少服务端 MIME 支持和模块解析) - 浏览器不识别
pnpm-workspace.yaml或workspace:*语义 - 所有 HTML 相关的复用(如公共头部、脚本模板、主题 CSS)必须落地为可构建/可引用的包(如
@demo/ui),而非裸 HTML 文件
pnpm workspace 下 HTML 子项目的典型结构
把 HTML 当作“产物”而非“源码入口”来组织:子包用 vite 或 esbuild 构建,输出带 index.html 的 dist 目录;根目录不放裸 HTML,只放构建配置和共享资源。
-
apps/docs:Vite 驱动的文档站点,index.html由vite build生成,引用@demo/components -
packages/ui:UI 组件库,导出dist/index.js和dist/style.css,供 HTML 页面通过<script type="module"></script>加载 -
packages/templates:提供 HTML 模板字符串或 EJS 模板,供构建时注入到index.html中
关键点:apps/docs 的 package.json 必须声明 "type": "module",且其 vite.config.ts 配置 build.rollupOptions.output.manualChunks 控制 HTML 引用的 JS/CSS 路径,避免硬编码。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
HTML 页面如何安全引用 monorepo 内部包
浏览器不支持 workspace:*,所以不能在 <script src></script> 里写 node_modules/@demo/core/index.js —— 这路径在生产环境不存在,且未经过构建处理。
- 开发阶段:用 Vite 的
alias将@demo/core映射到../../packages/core/src,HTML 通过<script type="module" src="/src/main.ts"></script>加载(Vite Dev Server 自动处理) - 生产阶段:必须构建。例如
packages/core运行tsc --declaration+rollup输出dist/core.umd.js,再让apps/docs的构建流程将其 copy 到public/libs/,HTML 用<script src="/libs/core.umd.js"></script> - 绝对禁止在 HTML 中写
../packages/xxx路径 —— 这会导致 CI 构建失败,且破坏包隔离
常见错误:用 HTML 直接 import 本地 TS 文件
现象:Uncaught TypeError: Failed to resolve module specifier "src/utils.ts"
原因:浏览器不解析 TS,也不理解相对路径指向 monorepo 内部源码目录。即使开了 type="module",ESM 只接受合法 URL 或已构建的 JS。
- 正确做法:所有 TS/JS 源码必须经构建(
vite build/tsc/rollup)转成浏览器可执行格式 - 调试技巧:在
apps/docs中用import { foo } from '@demo/utils',靠 Vite 的resolve.alias和 pnpm 的workspace:*在开发时软链接到源码,但构建时自动替换为 dist 路径 - 检查点:运行
pnpm build后,打开dist/index.html,查看 Network 面板中所有 JS/CSS 是否 200,且无404指向packages/目录
最易被忽略的是:HTML 不是“起点”,而是“终点”。所有逻辑、样式、数据都必须先变成构建产物,再由 HTML 消费 —— 这个边界一旦模糊,monorepo 就会退化成一堆难以维护的路径拼接。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










