src/builder/ 负责 solid-lib 的构建与开发流程。
相关入口:
- 根 README: ../../README.md
- route 文档: ../route/README.md
导入路径:
solid-lib/builder
包含两条主要命令入口:
solid-build用于生产构建, 输出到磁盘中的dist/solid-dev用于开发模式, 在内存中生成资源并通过 HTTP 服务提供内容
build.ts生产构建入口。负责加载配置、执行打包、复制静态资源,并写入index.html与产物文件。dev.ts开发服务入口。负责内存构建、HTTP 服务、SSE 刷新通知、轮询配置与源码变更。bundle.ts应用打包核心。负责生成 bootstrap 入口、调用Bun.build、收集 JS/CSS 产物并生成 HTML shell。config.ts配置加载与校验。负责默认值合并、solid-build.config.ts导入、路径边界校验、assetsDirs解析与outDir约束。config-file.ts配置文件导入辅助。负责扫描solid-build.config.ts的相对依赖、隔离暂存并导入用户配置。lib.ts构建器共享能力。当前主要包含 Solid Babel 插件接入、rxcoreshim,以及库构建辅助逻辑。path.ts路径安全辅助。负责真实路径解析、项目根目录边界、可写祖先和node_modules查找。
build.ts调用loadConfig()config.ts解析并校验solid-build.config.tsbuild.ts调用buildAppBundle()bundle.ts生成 bootstrap 入口、执行Bun.buildbuild.ts将打包产物写入outDirbuild.ts复制assetsDirs并写入index.html
dev.ts调用loadConfig()dev.ts调用buildAppBundle(),但不写入dist/dev.ts将 HTML、JS、CSS 保存在内存中dev.ts通过Bun.serve提供页面与资源dev.ts暴露/__solid_dev/eventsSSE 通道- 文件变化后重新构建,并通知浏览器刷新
当前支持的配置字段包括:
appComponentmountIdappTitleassetsDirsdevPortoutDir
config.ts 会拒绝旧字段,并限制以下边界:
- 应用入口必须位于项目根目录内
assetsDirs必须位于项目根目录内, 不能指向项目根目录或保留目录, 且内部 symlink 不能逃逸资产目录outDir不能指向项目根目录, 保留目录, 源码树内, 与assetsDirs重叠的位置, 或通过既有 symlink 祖先逃逸项目根目录- 入口组件必须有默认导出
bundle.ts 直接引用 dom-expressions/src/client 作为运行时入口,lib.ts 负责为其中的 rxcore 导入提供 shim。由于这是实际的运行时依赖,安装后的消费者环境也必须能解析到 dom-expressions。
solid-dev 不会写入 dist/。它会:
- 将打包产物保存在内存
Map - 通过 HTTP 直接返回 HTML、JS、CSS
- 对
assetsDirs保持磁盘读取 - 通过 SSE 推送 reload 事件
默认只运行 bun:test 测试:
bun run test运行安装路径相关的全部冒烟测试:
bun run test:smoke只运行本地目录消费者冒烟测试:
bun run test:local-consumer只运行打包安装消费者冒烟测试:
bun run test:packed-consumer只运行 bun:test 测试:
bun run test:unit