发布你的模块
本文介绍如何将业务模块发布到 npm,并登记到社区索引 sfmc-modules,以便服主通过 sfmc mod search 与 sfmc mod install 安装。
业务模块在各自独立的仓库中发布,不通过主仓的 Changesets 流水线(平台核心包 @sfmc-bds/* 的发版说明见文末附录)。
sfmc mod publish 历史命令已移除,请使用扩展命令 SFMC: Publish to npm 或直接执行 pnpm publish。
1. 发布前检查
正式版默认发布到 npm 的 latest 标签;预发布版本建议指定 dist-tag(如 @beta)。
2. 登记到社区索引
发布至 npm 后,在作者仓运行:
没有 CLI 时可安装 @sfmc-bds/devkit,使用 sfmc-module-submit;扩展提供 SFMC: 提交到官方模块索引,先打开 JSON 预览,再由作者选择提交。
提交需要 gh auth login 或 GH_TOKEN。有索引仓写权限时自动在索引仓建 PR 分支;其他作者自动 fork、创建分支并开 PR。相同内容不重复提交;首次收录及元数据调整使用 PR,后续版本由索引仓从 npm 自动同步。
--no-fork 可显式选择在目标索引仓建分支,需要该仓 Contents 和 Pull requests 写权限。提交路径不受账号名、仓库 owner 或模块 official 字段影响。
工具从 package.json 与 sapi/manifest.json 生成条目。SDK 范围来自 peerDependencies.@sfmc-bds/sdk,不能用开发依赖版本推断兼容性。
在 sfmc.registry.json 中补充展示信息即可:
配置只允许展示字段;ID、npm 包、版本、许可证、SDK 和依赖仍从契约读取。 更新已有模块时,未在作者配置中覆盖的名称、介绍及未指定的分类、标签、作者署名沿用索引内容,避免发版丢失已整理的展示信息。 工具检查公共 npm 的精确版本和元数据、最新索引 Schema、ID 来源、降版和依赖关系。 首次收录默认第三方身份,已收录模块保留维护者审核的官方身份。
PR 只修改索引仓的 modules/<id>.json。不要手改或提交生成的 index.json;合并后索引仓 Actions 自动构建聚合索引。
不使用命令行的作者可填写索引仓的 申请收录或更新模块 Issue 表单,机器人读取公共 npm 元数据并生成审核 PR。
发布后自动同步版本
首次收录和展示信息调整通过元数据 PR 完成。模块录入后,索引仓 Publish registry index 每小时从公共 npm 的 latest 读取版本与 peerDependencies.@sfmc-bds/sdk,并同步 modules/<id>.json 和 index.json;也可在索引仓手动运行该工作流。
平台和模块仓的发布 CI 只负责 npm 与模块自身的 tag / Release,无需索引仓写权限,也不再上传版本 PR。预发布版本使用 beta 等独立 dist-tag;同步拒绝已发布版本的降版、预发布 latest、已弃用版本及无效 SDK 范围。请求失败时不会发布不完整的索引。
若旧索引登记的版本高于 npm latest,仅当 npm 明确返回该旧版本不存在(404)时,自动纠正为实际发布版本;网络错误或权限错误不能触发纠正。
PR 合并后,服主即可通过 CLI 检索并安装该模块:
3. 官方模块发布说明
官方团队维护的模块可通过主仓的 module-publish 工作流手动触发。若工作流的 GitHub Token 未配置模块仓 Git Tag 权限,请在发布参数中保持 create_github_release=false,待 npm 发布完成后,由具备写权限的维护者在对应模块仓打 Tag。
模块命名与本地联调请查阅 业务模块开发指南。
附录:平台包发布(贡献者)
主仓核心包(@sfmc-bds/*)采用 Changesets 管理版本:
- 运行
pnpm run changeset生成变更说明。 - 合并至
main分支后,CI 会自动创建 Version PR。 - 合并 Version PR 后自动触发
ci-release-packages工作流完成 npm 发包。 详见 贡献指南。