@iap Packages
    Preparing search index...

    @iap Packages

    Spark SDK Monorepo

    基于 pnpm workspaces + Turborepo 构建的共享基础设施包 Monorepo。

    • Node.js ^22.18.0 或 >=24.11.0
    • pnpm >= 9
    # 安装依赖(同时通过 lefthook 自动配置 Git 钩子)
    pnpm install

    # 构建所有包
    pnpm build

    # 运行所有测试
    pnpm test

    # 并行启动所有包的开发监听模式
    pnpm dev
    .
    ├── templates/ # 新建包的代码生成模板plop
    │ └── package/ # package 脚手架模板
    ├── packages/ # 共享基础设施包
    │ ├── biome-config # 统一的 Biome 代码检查/格式化配置
    │ ├── ts-config # 统一的 TypeScript 编译配置
    │ ├── tsdown-config # 统一的 tsdown 构建配置
    │ ├── vitest-config # 统一的 Vitest 测试配置
    │ ├── commitlint-config # 统一的 commitlint 提交规范
    │ └── storage # 企业级浏览器存储工具localStorage / sessionStorage
    └── apps/ # 内部应用不发布到 npm
    ├── storybook # 组件预览Storybook 10 + Vite
    └── typedoc # API 文档站点

    所有包均使用 @iap/ 作用域。

    命令 说明
    pnpm build 构建所有包
    pnpm build:affected 仅构建自上次提交以来变更的包
    pnpm dev 启动所有包的监听模式
    pnpm test 运行所有测试
    pnpm lint 使用 Biome 检查所有包
    pnpm type-check 运行 TypeScript 类型检查
    pnpm new-package 交互式脚手架新建包(基于 plop)
    pnpm changeset 创建变更集以备版本发布
    pnpm version-packages 根据变更集升级包版本
    pnpm publish-packages 构建并发布包到 npm
    pnpm check-cycles 检测包之间的循环依赖
    pnpm dedupe 对 lockfile 中的依赖去重

    运行交互式脚手架命令:

    pnpm new-package
    

    按提示选择包类型、填写包名和描述,工具会自动生成包含 package.jsontsconfig.jsonbiome.jsontsdown.config.tsvitest.config.ts 及初始 src/index.ts 的完整包结构。

    包类型说明:

    类型 是否发布 说明
    utils 纯 TypeScript 工具库
    components React 组件库
    domain 业务领域逻辑包
    internal 内部工具包,不对外发布

    统一的 Biome 代码检查与格式化配置。

    // biome.json
    { "extends": ["@iap/biome-config"] } // 基础配置
    { "extends": ["@iap/biome-config/react"] } // React 项目
    { "extends": ["@iap/biome-config/next"] } // Next.js 项目
    { "extends": ["@iap/biome-config/node"] } // Node.js 项目

    统一的 TypeScript 编译器配置。

    // tsconfig.json
    { "extends": "@iap/ts-config/base" } // 基础配置
    { "extends": "@iap/ts-config/react" } // React 项目
    { "extends": "@iap/ts-config/node" } // Node.js 项目

    统一的 tsdown 构建配置。同时输出 ESM 和 CJS 格式,含类型声明文件、sourcemap 及代码压缩。

    // tsdown.config.ts
    import { baseConfig } from '@iap/tsdown-config'
    export default { ...baseConfig, entry: ['src/index.ts'] }

    // React 包(自动外部化 react/react-dom):
    import { reactConfig } from '@iap/tsdown-config'

    // Node.js 包(目标平台 node18,不压缩):
    import { nodeConfig } from '@iap/tsdown-config'

    统一的 Vitest 测试配置。强制要求行、函数、分支、语句的测试覆盖率均不低于 80%。

    // vitest.config.ts
    import { mergeConfig } from 'vitest/config'
    import { nodeConfig } from '@iap/vitest-config/node' // Node 环境
    import { reactConfig } from '@iap/vitest-config/react' // jsdom 环境
    export default mergeConfig(nodeConfig, {})

    统一的 commitlint 提交消息规范,格式如下:

    [topic]: 描述内容至少 5 个字符

    # 示例
    [feat]: add gift pack theme update
    [fix]: resolve login redirect loop
    [refactor]: simplify payment flow handler

    执行 pnpm install 时自动安装钩子。

    钩子 检查内容
    pre-commit 对暂存文件执行 Biome 自动修复;禁止源码中出现中文字符
    commit-msg 通过 commitlint 校验提交消息格式

    本仓库使用 Changesets 管理版本,包发布到 GitLab Packages 私有 npm 源,构建与发布流程由 Jenkins 执行。

    每次功能开发完成后,在推送前创建变更集:

    # 1. 交互式选择受影响的包和版本类型(patch / minor / major)
    pnpm changeset

    # 2. 提交生成的 .changeset/*.md 文件
    git add .changeset/
    git commit -m "[chore]: add changeset"
    git push
    # 消费 .changeset/ 记录,更新 package.json 版本号和 CHANGELOG.md
    pnpm version-packages

    git add .
    git commit -m "[chore]: version packages"
    git push

    代码推送后,在 Jenkins 手动触发 sdk-publish Job,流水线自动执行:

    安装依赖类型检查代码检查单元测试构建发布到 GitLab Packages
    

    详细配置见 constraint/publish.md