ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

插件打包流程完全指南:Impeccable 的 build.js 如何一键生成 dist 与 plugin 产物

插件打包流程完全指南:Impeccable 的 build.js 如何一键生成 dist 与 plugin 产物 插件打包流程完全指南Impeccable 的 build.js 如何一键生成 dist 与 plugin 产物【免费下载链接】impeccableThe design language that makes your AI harness better at design.项目地址: https://gitcode.com/GitHub_Trending/im/impeccableImpeccable 是一款为 AI 编码代理提供设计技能与反模式检测的开源项目。它的插件打包流程由 scripts/build.js 这个主编排器驱动读取skill/下的源文件通过配置驱动的转换器工厂一次性生成 17 种 AI 工具Cursor、Claude Code、Gemini、Codex 等的 provider 产物到dist/再组装 universal 目录、打包 ZIP、同步仓库根目录的 harness 目录最终产出./plugin插件子树。本文带你走读这条完整流水线。构建命令从哪条入口跑起来在 package.json 中定义了四条常用构建命令命令作用bun run build:skills生成 provider 产物跳过仓库根目录同步--skip-root-syncbun run build:skills:release完整构建含根目录同步与./plugin子树生成bun run build构建后把dist拷入build/_data/dist供 Cloudflare Pages 下载功能读取bun run clean清理dist与build目录构建流程在 docs/DEVELOP.md 的 “Building” 一节有简明说明前置条件只有 Bun无需外部依赖。构建流水线四步走第一步读取源技能文件build()函数从 skill/SKILL.src.md 及其reference/、scripts/兄弟目录读取源文件readSourceFiles并统计用户可调用的命令数。源文件是唯一的事实来源所有 provider 产物都由它派生。第二步配置驱动的 provider 转换这是整个打包流程最精妙的部分。scripts/lib/transformers/providers.js 中的PROVIDERS映射表为每个 AI 工具定义一份配置输出目录如.claude、.cursor、frontmatter 字段白名单、是否发射 hooks、agent 格式等。scripts/lib/transformers/factory.js 的createTransformer(config)工厂根据配置生成转换函数替换{{model}}、{{config_file}}、{{ask_instruction}}等占位符按各 provider 支持的字段输出 frontmatter并写入 provider 专属标记块如codex标签。build.js只需一个循环即可完成全部 17 个 provider 的转换for (const config of Object.values(PROVIDERS)) { const transform createTransformer(config); transform(skills, DIST_DIR, { skillsVersion }); }新增一个 provider 只需在PROVIDERS里加一条配置构建循环会自动拾取这正是配置驱动架构的价值。第三步组装 universal 目录并打包 ZIPassembleUniversal()把各 provider 的 dotfile 目录.cursor/、.claude/、.gemini/等合并进dist/universal/并生成一份README.txt说明每个文件夹对应哪个工具因为这些隐藏目录在 Finder 里默认不可见。随后 scripts/lib/zip.js 用 archiver 库而非 shell 的zip生成universal.zip保证在 Cloudflare Pages 构建环境等无 zip 命令的平台上也能跨平台工作。值得注意的是它的“大声失败”策略ZIP 为空或 0 字节会直接抛错退出绝不让空产物静默上线。第四步同步根目录并生成 plugin 子树不加--skip-root-sync时构建会把各 provider 的技能镜像同步到仓库根目录的.cursor/skills、.claude/skills等位置mirrorDirContentsSync只替换生成物保留本地 harness 的私有产物并清理废弃技能残留。同时构建./plugin/子树从.claude-plugin/plugin.json派生出plugin/.claude-plugin/plugin.jsonskills 字段带尾斜杠这是 Issue #86 中修复的加载陷阱、复制技能与 agents、写入plugin/hooks/hooks.json钩子清单。这个约 0.3 MB 的精瘦目录就是 Claude Code 市场与 Grok Build 的安装源。另外OpenAI 插件是独立产物stageOpenAIPlugin每次构建都会重新生成dist/openai/并打包openai-plugin.zip确保上传包与本地预览永不漂移。六道质量闸门构建为什么经常“失败”build.js的后半段是一组验证器任何一道不通过都会以非零码退出版本一致性validatePluginVersions见 scripts/lib/validate-plugin-versions.jsmarketplace、./plugin子树、捆绑的 SKILL.md 三处版本必须与根plugin.json完全一致防止版本漂移issue #274。清单形状validatePluginManifestShape见 scripts/lib/validate-plugin-manifest.js拒绝 Claude Code 加载器不认的 manifest 键比如曾导致子代理全部失效的agents数组。计数校验generateCounts扫描 README、AGENTS.md、plugin.json 中的“N commands / N detection rules”表述与源数据不符即报错让页面数字永不过期。文案反 AI 腔校验validateProse/validateSkillProse按 docs/STYLE.md 的禁词表拦截 em dash、seamless、delve等营销腔短语每条规则都附带打印失败理由。占位符句法校验validateAskInstructionSites{{ask_instruction}}替换后是完整句子必须处于句首防止把拼错的指引同时发给所有 provider。frontmatter 校验description 不得超过 1024 字符。这种“生成即验证”的设计让./plugin这类提交进仓库的生成产物永远与源码同步。产物总览dist 里到底有什么一次完整构建后dist/gitignore不入库的结构大致如下dist/ universal/ # 17 个 provider dotfile 目录 README.txt universal.zip # 通用安装包 openai-plugin.zip # OpenAI 插件上传包 provider/.dir/... # 各 provider 单独输出而提交进仓库的持久产物是./plugin子树plugin/ .claude-plugin/plugin.json # 市场安装入口 .grok-plugin/plugin.json # Grok 原生清单 skills/impeccable/ # 技能本体 agents/ # 四个子代理 hooks/hooks.json # PostToolUse Stop 钩子小结这套打包流程值得借鉴的三个设计配置驱动而非代码复制provider 差异全部收敛为 providers.js 中的数据新工具接入成本近乎为零。单一事实来源所有产物从skill/SKILL.src.md派生加上版本与计数双重校验杜绝多份拷贝各自漂移。大声失败0 字节 ZIP、缺失 provider 目录、版本不一致都会让构建直接终止坏产物永远到不了用户手里。如果想深入各 harness 的能力矩阵frontmatter 字段、占位符体系、目录结构差异可阅读 docs/HARNESSES.md完整的开发者指南见 docs/DEVELOP.md。【免费下载链接】impeccableThe design language that makes your AI harness better at design.项目地址: https://gitcode.com/GitHub_Trending/im/impeccable创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表