Skip to content

Core Build

worable edited this page Oct 12, 2026 · 1 revision

构建项目

pnpm build 分两步执行:先编译所有插件与主题的前端包,再按 workspace 拓扑顺序递归构建。

构建命令

pnpm build           # 构建全部(先 frontend,再 -r build)
pnpm build:frontend  # 仅构建插件/主题的前端包
pnpm -r build        # 递归构建所有 workspace 包

构建顺序

pnpm build 的执行顺序:

  1. build:frontend — node scripts/build-frontend.mjs,编译所有主题和插件的 frontend/ 到 frontend/dist/,同步到 data/ 并生成 web 的 frontend-registry.ts
  2. -r build — 递归构建,按 workspace 拓扑顺序:
    • @stackpanel/db → Prisma Client 生成 + dist
    • @stackpanel/sdk → 类型与工具函数
    • @stackpanel/spec → 契约单一来源(API 版本 / OpenAPI 投影)
    • @stackpanel/ui → 共享组件
    • @stackpanel/plugin-* → 各内置插件 dist
    • @stackpanel/api → tsup 打包到 dist/
    • @stackpanel/web → Next.js 构建到 .next/

产物说明

包 产物路径 构建工具
@stackpanel/api apps/api/dist/ tsup
@stackpanel/web apps/web/.next/ Next.js (Turbopack)
@stackpanel/sdk packages/sdk/dist/ tsc
@stackpanel/spec packages/spec/dist/ tsc
@stackpanel/ui packages/ui/dist/ tsc
@stackpanel/db packages/db/dist/ + src/generated/prisma/ tsup + Prisma generate
内置插件 packages/plugins/*/dist/ esbuild (build-plugin.mjs)
前端包 packages/*/frontend/dist/ esbuild (build-frontend.mjs)

类型检查与 Lint

pnpm typecheck      # build:frontend + 全 workspace tsc --noEmit
pnpm lint           # 全 workspace eslint
pnpm format:check   # prettier 检查
pnpm format         # prettier 自动格式化

许可证检查

pnpm license:check

CI 门禁封禁 copyleft 协议(GPL/LGPL/AGPL/MPL/EPL/CDDL 及其 -or-later 变体)。唯一例外是 mariadb(LGPL-2.1),因为它是 Prisma MySQL 驱动的底层依赖,LGPL 允许链接使用而不传染 MIT 代码。

插件打包

插件打包为可上传的 ZIP:

pnpm plugin:pack <plugin-name>

打包与签名细节见 插件打包与签名。

Clone this wiki locally