
Astryx Monorepo工程实践pnpm 11 Changesets 可信发布流水线完全指南【免费下载链接】astryxAn open source design system thats fully customizable and agent ready项目地址: https://gitcode.com/GitHub_Trending/as/astryxAstryx 是一个开源、完全可定制且面向 AI Agent 的设计系统Design System。它的 Monorepo 工程体系由三大支柱组成pnpm 11 工作区管理、Changesets 版本管理以及基于npm OIDC 可信发布的零长期 Token 发布流水线。本文面向新手带你快速看懂这套体系是如何运作的以及为什么它值得你在自己的项目中借鉴。 Monorepo 布局一份 workspace 配置统领全局Astryx 的仓库按职责分为四层packages/核心库、CLI、各主题包、apps/文档站、Storybook、沙盒、internal/内部工具与测试设施、scripts/仓库级脚本。全部公共包都以astryxdesign/*命名共 12 个可发布包。pnpm 11配置从 package.json 迁移到 pnpm-workspace.yaml仓库锁定pnpm11.10.0见 package.json 的packageManager字段。pnpm 11 把原来分散在.npmrc和package.json里的配置统一收进了 pnpm-workspace.yaml有几个对新手很实用的细节依赖目录扁平化nodeLinker: hoistedshamefullyHoist保持 Yarn 1 风格的node_modules布局避免构建工具和测试偶发导入找不到依赖。Catalog 版本统一vite、stylexjs/stylex、prettier、esbuild等全仓库工具只在 catalog 里声明一次所有消费方写catalog:升级时改一处即可永远不会出现两个 vite 大版本并存的裂脑问题。供应链防线minimumReleaseAge: 100807 天阻止刚发布、可能含恶意代码的新版本混入依赖图overrides里每条都是活的安全地板并注释了依赖来源和删除条件如 pnpm-workspace.yaml#L47-L80。构建脚本白名单pnpm 11 用allowBuilds映射替代旧版onlyBuiltDependencies只有esbuild、sharp等少数包被允许执行安装期脚本。 Changesets 版本管理让 changelog 自己长出来锁步版本12 个包共用一套版本号.changeset/config.json 把core、cli、build和全部 7 个主题包放进fixed数组——它们版本永远一致。任何一个包升级全套同步 bump消费者不会出现core 领先 theme 两个版本的地狱场景而 Storybook、Sandbox 等内部应用则被列入ignore不参与发布。三步走changeset → version → publish写 changeset开发者运行pnpm changeset:new。它不是裸的changeset命令而是仓库封装的 scripts/changeset-new.mjs会自动检测本次改动涉及哪些包并预选好还会记录贡献者身份——不用手工枚举 frontmatter。CI 门禁把关scripts/check-changesets.mjs 强制四条约定0.x 阶段 breaking 变更只能 bump minor、必须带[category]标签、必须署名贡献者、frontmatter 里的包必须真实存在。格式不合规的 PR 直接红灯。Version Packages PR合并后运行pnpm version-packages它串联changeset version、codemod 提升把暂存在next/目录的破坏性变更迁移脚本转正为正式版本、内部依赖同步和 changelog 格式化全部落盘为文件改动再开一个 PR 人工复核。 可信发布流水线CI 里没有一个 NPM_TOKENnpm OIDC用身份代替密码传统做法是在 CI 里存一个NPM_TOKEN长期凭证——它泄露一次就前功尽弃。Astryx 采用npm Trusted PublishingOIDC发布时 CI 向 GitHub 换取一个短生命周期身份令牌当场兑换成 registry 凭证并为每个包打上provenance来源溯源印章。信任关系配错会直接响亮地失败没有 Token 可兜底详见 docs/release.md。一个 release.yml 统领 stable 与 canary 双轨npm 每个包只允许一个可信发布者配置所以所有发布都收敛在 release.yml 一个工作流文件里发布轨触发方式产物Stablelatest手动 dispatch已 bump 的正式版本支持 dry-run 预览Canary每次 push 到 main0.x.y-canary.sha用户可npm i astryxdesign/corecanary两个 Job 各自独立的并发组频繁的 canary 推送永远不会挤占或取消一次 stable 发布。发布全程版本幂等——已发布过的版本自动跳过重跑零副作用。配套设施一键配信任 定期清 canaryscripts/npm/setup-trusted-publishing.mjs维护者本地运行的一次性脚本三种模式审计 /--bootstrap抢注包名 /--setup-trust注册信任配置幂等、可 dry-run。scripts/npm/prune-canaries.mjscanary 发布后自动清理旧版本默认只动 npm 允许的 72 小时窗口内版本保持 registry 上 Versions 列表干净。 新手可抄作业的 5 个要点配置集中化pnpm 11 下把 hoist、overrides、版本 pin 全部收进pnpm-workspace.yaml并用 catalog 统一工具版本供应链设地板minimumReleaseAge 带删除条件的安全 override比盲目latest稳得多锁步版本强耦合的包组用fixed数组锁定杜绝版本漂移changeset 也要门禁用自定义脚本自动检测受影响包 CI 校验格式changelog 质量交给机器去 Token 化npm OIDC 可信发布 provenanceCI 里不留任何长期凭证且发布幂等可重跑。更多细节可查阅 docs/release.md、docs/architecture/ 以及根目录 CONTRIBUTING.md。【免费下载链接】astryxAn open source design system thats fully customizable and agent ready项目地址: https://gitcode.com/GitHub_Trending/as/astryx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考