资讯动态

pollinations 仓库分支级代码格式化实战:用 Biome Skill 保持代码风格与 CI 一致

发布时间:2026/10/13 6:31:32 来源:尧图企业网站定制
AI 应用媒体生成后端前端【免费下载链接】pollinationsYour Friendly Open-Source Gen-AI Platform项目地址https://gitcode.com/gh_mirrors/po/pollinations点击查看免费下载导读pollinations 是一个大型 TypeScript/JavaScript 单体仓库monorepo横跨enter.pollinations.ai、gen.pollinations.ai、packages/sdk、packages/ui等多个工作区。为了让海量代码在提交与提 PR 前保持统一格式仓库维护了一个名为code-formatting的 Claude Code Skill一条命令即可对当前分支相对基线分支默认main改动过的所有 JS/TS/JSON 文件执行 Biome 格式化。读完本文你将掌握该 Skill 的完整用法、底层脚本原理、biome.jsonc配置每一项的含义以及它与ci-pull-request-checks.ymlCI 工作流如何联动从而在自己的分支上先一步通过 CI 的格式门禁。一、Skill 概览一条命令完成格式化Skill 的入口文档位于 .claude/skills/code-formatting/SKILL.md。它的 frontmatter 定义了触发语义name: code-formattingdescription: Format code on the current branch using Biome. Use when asked to format, lint, or clean up code before committing or creating a PR.也就是说只要向 Claude 提出format / lint / clean up code之类的请求Skill 就会被触发把当前分支上改动过的代码用 Biome 格式化而不是对整个代码库做全局重排——这既避免了海量无关 diff也保证了改动的可审查性。快速使用在仓库根目录执行.claude/skills/code-formatting/scripts/format-branch.sh该命令会格式化所有与main分支相比发生变更的.js、.ts、.jsx、.tsx、.json、.jsonc文件。指定自定义基线分支如果当前分支是从develop或其他分支切出的可以把它作为参数传入.claude/skills/code-formatting/scripts/format-branch.sh develop这样改动文件的比对基准就从默认的main切换为你指定的分支。二、脚本原理拆解format-branch.sh 做了什么Skill 的核心逻辑全部封装在 format-branch.sh 这个 bash 脚本中全文不到 30 行。其流程与文档中 What It Does 的四步一一对应找到当前分支相对基线分支改动过的文件过滤出 JS/TS/JSON 类型文件对这些文件运行npx biome check --write使用与ci-pull-request-checks.yml相同的配置。逐行解读#!/bin/bash set -e BASE_BRANCH${1:-main} # 基线分支默认 main FILES$(git diff --name-only $BASE_BRANCH...HEAD | grep -E \.(js|ts|jsx|tsx|json|jsonc)$ || true)set -e任一命令失败立即退出避免格式化中途出错但脚本继续的假成功git diff --name-only $BASE_BRANCH...HEAD三连点...表示取HEAD相对BASE_BRANCH与HEAD共同祖先之间的差异也就是只列出当前分支新增的提交所改动的文件天然排除了基线分支上已有的历史改动grep -E \.(js|ts|jsx|tsx|json|jsonc)$把改动文件限定到 Biome 能处理的六类扩展名|| true保证没有匹配时管道不会触发set -e退出。if [ -z $FILES ]; then echo ✅ No JS/TS/JSON files changed on this branch exit 0 fi echo $FILES | xargs npx biome check --write若当前分支没有 JS/TS/JSON 改动例如纯文档分支脚本直接成功退出不会空跑 Biome否则把所有改动文件一次性传给npx biome check --write--write让 Biome 以安全修复模式直接改写文件包括自动格式化、应用可安全自动修复的 lint 规则。需要说明的是format-branch.sh内部使用的git diff ... | grep ...是简化版过滤它没有像 CI 那样排除node_modules、dist、package-lock.json等路径详见下文第四节。不过在仓库实际使用中提交到版本库的依赖产物很少影响有限若需要更严格的过滤可以直接使用仓库根 package.json 中预置的format:changed脚本见第五节。三、与 CI 完全对齐ci-pull-request-checks.yml 的格式门禁Skill 文档强调脚本Uses same settings as theci-pull-request-checks.ymlCI workflow这不是一句空话。查看 .github/workflows/ci-pull-request-checks.yml 中的lintjob其做法与本地脚本如出一辙- name: Get changed files run: | FILES$(git diff --diff-filterd --name-only HEAD^1 HEAD | grep -E \.(js|ts|jsx|tsx|json|jsonc)$ | grep -v -E (node_modules|dist|build|\.next|\.cache|out|package-lock\.json|secrets)/ | grep -v package-lock\.json$ || true)CI 用git diff --diff-filterd HEAD^1 HEAD对比 PR 合并提交与其第一父提交基线分支顶端--diff-filterd剔除被删除的文件过滤规则与本地脚本相同的六类扩展名并额外排除node_modules、dist、build、.next、.cache、out、package-lock.json、secrets等路径——这正是biome.jsonc中files.excludes的镜像详见第四节随后运行npx biome check --write --no-errors-on-unmatched--no-errors-on-unmatched保证文件列表为空时不会报错。真正的门禁在下一步- name: Check for formatting changes run: | if [[ -n $(git status --porcelain) ]]; then echo ❌ Biome found formatting issues. Run npm run format locally. git diff exit 1 fi即CI 先以--write自动修复再检查git status --porcelain是否还有未提交的改动。只要本地格式化不彻底CI 就会失败并打印 diff 提示。这正是本地先跑format-branch.sh的价值——在本地把改动格式化到与 CI 完全相同的状态就能一次通过。此外该 workflow 末尾还有一个gatejob聚合lint、enter、gen、website四个 job 的结果作为 main 分支规则集要求的状态检查任何格式问题都会阻断合并。四、根因解读biome.jsonc 的每一项配置无论是本地脚本还是 CIBiome 的裁决标准都来自仓库根目录的 biome.jsonc。这是格式化的唯一事实来源理解它才能真正理解什么会被改、什么会被跳过。4.1 Formatter 与 JavaScript 风格{ formatter: { indentStyle: space, indentWidth: 4 }, javascript: { formatter: { quoteProperties: preserve, quoteStyle: double } } }缩进使用空格而非 Tab宽度为 4。这是 pollinations 全仓库的统一缩进规范与许多前端项目默认的 2 空格不同直接由 Biome 强制保证引号字符串统一使用双引号quoteStyle: double对象属性名quoteProperties: preserve表示不改写可省略引号的属性名是否带引号的现状避免产生无意义 diff。4.2 Linter 规则linter: { enabled: true, rules: { complexity: { useLiteralKeys: off, noBannedTypes: off }, security: { noDangerouslySetInnerHtml: off } } }enabled: true意味着biome check不只是格式化还会跑 lint 检查。三条显式关闭的规则说明了项目的取舍useLiteralKeys应使用字面量键访问对象属性关闭允许obj[dynamic-key]这类带变量的访问模式避免过度约束业务代码noBannedTypes禁止使用String/Number等包装类型关闭允许在代码中使用这些类型noDangerouslySetInnerHtmlReact 禁止直接注入 HTML关闭这是面向 UI 层packages/ui、apps/下有大量 React 应用的必要豁免仓库允许在受控场景下使用dangerouslySetInnerHTML。4.3 files.includes / excludes界定 Biome 的作用范围files: { includes: [**], excludes: [ .github/**, !**/node_modules/**, !**/secrets/**, !**/dist/**, !**/build/**, !**/.next/**, !**/.cache/**, !**/out/**, !**/worker-configuration.d.ts, !**/worker-runtime.d.ts, !**/worker-bindings.d.ts, !**/better-auth.ts, !**/routeTree.gen.ts, !operations/quest-dashboard/assets/bundle.js, !**/*.css, !**/*.yml, !**/*.md, !packages/ui/src/licenses/** ] }每条排除规则背后都有明确理由配置中已附注释排除项原因.github/**GitHub Actions 工作流文件保持原样node_modules依赖产物不该格式化secrets/**SOPS 加密的密钥文件重新格式化会破坏加密 MAC 校验dist/build/.next/.cache/out构建产物worker-configuration.d.ts等*.d.ts、better-auth.ts、routeTree.gen.ts、quest-dashboard 的bundle.js自动生成文件格式化会与生成器输出冲突*.cssBiome 尚不支持 Tailwind v4 语法*.yml/*.mdBiome 不原生格式化 YAML 与 Markdownpackages/ui/src/licenses/**字体 OFL 许可文本必须逐字分发不得改动4.4 overrides 与 CSS/JSON 开关overrides针对apps/chat/**单独放宽了一组规则关闭a11y下的noSvgWithoutTitle、useButtonType、noLabelWithoutControl等 7 条无障碍规则以及suspicious.noArrayIndexKey、correctness.useExhaustiveDependencies等——这是对历史遗留 UI 代码的务实豁免说明仓库允许按目录差异化配置css与json的 formatter/linter 均显式enabled: falseJSON 文件由其他工具管理CSS 因 Tailwind v4 语法问题被整体跳过。这些排除规则解释了为什么文档会说只格式化改动文件——即便某次改动涉及.css或.md它们也不会进入 Biome 的处理范围。五、配套入口npm run format:changed 与 Claude Command除了 Skill 脚本仓库还提供了两个等效入口适用于不同习惯的开发者。5.1 根目录 npm scriptpackage.json 中预置了format:changedformat:changed: git diff --diff-filterd --name-only origin/main | grep -E \\.(js|ts|jsx|tsx|json|jsonc)$ | grep -v -E (node_modules|dist|build|\\.next|\\.cache|out)/ | xargs npx biome check --write与 Skill 脚本相比它有三个差异基线固定为origin/main远程 main适合本地分支已落后于远端时的场景增加--diff-filterd跳过被删除的文件额外过滤node_modules、dist等目录与 CI 的过滤逻辑更接近。在仓库中执行npm run format:changed即可完成同样的分支级格式化。5.2 Claude Commandformat.md.claude/commands/format.md 提供了面向 Claude 交互的等价命令且覆盖了未暂存与已暂存两种状态# 未暂存的改动 git diff --name-only HEAD | grep -E \.(js|ts|jsx|tsx)$ | xargs -r npx biome check --write # 已暂存的改动staged git diff --cached --name-only | grep -E \.(js|ts|jsx|tsx)$ | xargs -r npx biome check --write注意这里的扩展名过滤只包含js|ts|jsx|tsx四种不含 json/jsonc且针对的是HEAD之前的全部改动而非分支差异——适合改完随手一跑的轻量场景与 Skill 的分支级定位互补。六、在项目工作流中的位置从 AGENTS.md 到 Quest 检查清单这个 Skill 并非孤立工具而是 pollinations 开发纪律的一环仓库多处文档都引用了同一套 Biome 约定AGENTS.md 的 Code Style Workflow 一节明确要求Run npx biome check --write file after edits and before commits.并把 Skill 维护在.claude/skills/下、通过.agents/skills/的相对目录链接暴露给 Codex模型管理技能文档 repository-and-local-testing.md 同样要求提交前运行npx biome check --write changed-files社区 Quest 的提交规范.github/ISSUE_TEMPLATE/quest.yml把已对改动文件运行npx biome check --write列为 PR 检查清单的必选项子包也沿用同样配置例如 packages/polli-cli/package.json 的lint脚本即biome check --write src/。由此可见无论你是直接开发者、提交 Quest 的社区成员还是驱动 Claude/Codex 完成编码任务的 Agent提交前跑一次分支级 Biome 格式化都是统一的验收前提。七、使用注意事项与排障建议综合 Skill 文档的 Notes 与源码实现实际使用时有几点需要留意必须在仓库根目录运行脚本依赖git diff的仓库级上下文且npx biome需要能解析到根目录的biome.jsonc与 devDependencies依赖 Node.js / npx仓库在 package.json 中将biomejs/biome声明为^2.3.10的 devDependency请确保已执行过npm install只格式化改动文件不重排整个代码库这是设计意图——避免在 PR 中夹带与功能无关的全量 diff也让 Code Review 聚焦真实改动基线分支可定制从develop等分支切出的分支记得用format-branch.sh develop或调整format:changed的基线否则会把基线分支自身未格式化的历史改动一并卷入与 CI 的判定标准完全一致本地通过 ≠ 万事大吉CI 还会用git status --porcelain二次校验。因此本地跑完脚本后建议顺手git status确认没有残留未提交的格式化改动再提交即可改动的文件类型不在范围内时脚本会安静退出例如只改了.css/.md/.yml的分支会直接输出 No JS/TS/JSON files changed 并成功退出这是正常行为因为这类文件本就不在 Biome 的处理范围内。结语code-formattingSkill 是 pollinations 仓库提交前格式化这一工程纪律的最小落地单元一条脚本、一份biome.jsonc、一个 CI 门禁三者共用同一套规则形成本地预检 → CI 复核 → 合并放行的闭环。理解其脚本逻辑与配置意图后你不仅能在 pollinations 的任意分支上规范地提交代码也能把这套分支级、配置驱动、与 CI 对齐的格式化思路迁移到自己的 Biome 项目中——先读biome.jsonc定规矩再用脚本把改动圈定在分支内最后让 CI 兜底验证。赞分享AI 应用媒体生成后端前端【免费下载链接】pollinationsYour Friendly Open-Source Gen-AI Platform项目地址https://gitcode.com/gh_mirrors/po/pollinations点击查看免费下载相关推荐RedditVideoMakerBot代码自动格式化保持代码风格一致RedditVideoMakerBot代码自动格式化保持代码风格一致 引言代码风格混乱的痛点与解决方案 在开源项目开发过程中随着贡献者数量的增加代码风格音视频工作流自动化Ani代码自动格式化保持团队代码风格一致Ani代码自动格式化保持团队代码风格一致 在多人协作的开源项目中统一的代码风格是提升开发效率、减少冲突的关键。Ani项目通过多层次配置确保代码风格一致性本音视频移动开发视频AtlasOS终极指南免费开源Windows系统优化解决方案AtlasOS终极指南免费开源Windows系统优化解决方案 想要让你的Windows系统运行更快、更安全、更高效吗 AtlasOS正是你需要的开源Wi操作系统隐私合规上一篇Audacity技术架构深度解析从核心原理到高级应用下一篇Tectonic -X build 命令详解基于 Tectonic.toml 的项目化文档构建创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑