0Pricing
React Academy · 课时

发布到 npm 与语义化版本控制

使用 changesets 或 semantic-release 自动发布,并将带作用域的包发布到 npm 注册表

发布到 npm 与语义化版本控制 是 CoddyKit 上的免费 React Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。

npm publish --dry-run

发布前,请务必运行 npm publish --dry-run。这会模拟发布过程,但不会实际上传任何内容,同时准确显示将被包含的文件、文件大小以及软件包压缩包的内容。它可以发现一些常见错误,例如意外包含源文件或遗漏 dist 目录。

控制发布的文件

使用 package.json 中的 files 字段控制要发布的内容:"files": ["dist", "README.md"]。这种白名单方式比 .npmignore 更安全,因为 .npmignore 使用黑名单,如果忘记添加敏感文件,可能会导致其泄露。请务必包含 dist、类型声明和文档。绝不要包含源代码、测试或 node_modules。

语义化版本基础

npm 软件包遵循语义化版本规范(semver):MAJOR.MINOR.PATCH。删除属性或更改 API 签名等不兼容变更应递增 MAJOR。新增组件或新的可选属性等向后兼容的功能应递增 MINOR。向后兼容的错误修复应递增 PATCH。0.x.x 版本被视为尚未稳定,此时任何内容都可能发生不兼容变化。

预发布版本

预发布标识符表示某个版本尚未达到可用于生产环境的状态:1.0.0-alpha.1 表示早期实验性构建版本,1.0.0-beta.2 表示功能已完成但可能仍存在错误的版本,1.0.0-rc.1(候选发布版本)表示已准备好进行最终测试的版本。请使用 npm publish --tag beta 发布预发布版本,以免它们成为默认安装版本。

changesets 工具

Changesets 是组件库中用于管理软件包版本和更新日志的标准工具。工作流程如下:贡献者运行 yarn changeset add,记录发生的变更及其类型(major/minor/patch)。持续集成运行 yarn changeset version,递增软件包版本。发布时运行 yarn changeset publish,将软件包发布到 npm。

自动生成 CHANGELOG

Changesets 会根据贡献者提交的变更集文件,自动生成并维护 CHANGELOG.md。每条记录都包含版本号、发布日期和变更说明。这样无需手动维护更新日志,就能创建每个版本都清晰易读的历史记录。

semantic-release 作为替代方案

semantic-release 是一种全自动版本管理工具,它会根据约定式提交消息确定下一个版本(feat: → minor,fix: → patch,BREAKING CHANGE: → major)。它会递增版本、生成更新日志并发布到 npm——所有操作都会在合并到 main 后由持续集成触发。整个版本管理过程无需手动操作。

npm 访问权限:公开与受限

无作用域软件包(my-component)始终是公开的。有作用域软件包(@myorg/my-component)默认为受限(私有),请使用 npm publish --access public 将其公开发布。受限软件包需要 npm 付费账户或组织。首次发布前,请确认访问权限设置。

npm 来源证明

npm 来源证明会以可验证的方式,将您发布的软件包关联到其对应的特定 git 提交。请在 GitHub Actions 中使用 npm publish --provenance 启用此功能。使用者可以验证他们安装的软件包是否确实由 npm 注册表页面所显示的准确源代码提交构建而成。这会显著提升软件供应链的安全性。

弃用旧版本

如果某个版本存在严重错误或不兼容变更,请将其弃用:npm deprecate your-package@1.2.3 "Security vulnerability, upgrade to 1.2.4"。npm 会向安装该版本的所有人显示弃用警告。这不会删除该版本(npm 默认不会删除已发布的版本),但会提醒使用者进行升级。

有作用域软件包的命名

有作用域软件包使用 @scope/package-name 格式。作用域通常是您的 npm 用户名或组织名称。有作用域软件包可以清楚表明软件包的维护者,并避免与无作用域软件包发生命名冲突。私有软件包以及与您的组织相关联的开源软件包,都应使用有作用域的软件包。

语义化版本:MAJOR 与 MINOR

根据语义化版本规范,什么时候应当递增 MAJOR 版本号?

课程回顾:发布与版本管理

使用 npm publish --dry-run 预览发布内容,并使用 files 字段控制要发布的内容。语义化版本规范:不兼容变更使用 MAJOR,新功能使用 MINOR,修复使用 PATCH。预发布版本使用 -alpha/-beta/-rc 标记。Changesets 可为协作开发的组件库自动完成版本管理和 CHANGELOG 生成。semantic-release 可根据约定式提交自动完成这些工作。启用 --provenance 以提升软件供应链安全性。使用 npm deprecate 弃用存在错误的版本。

常见问题解答

「发布到 npm 与语义化版本控制」课时是免费的吗?

是的 — 「发布到 npm 与语义化版本控制」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。

「发布到 npm 与语义化版本控制」这节课中我会学到什么?

使用 changesets 或 semantic-release 自动发布,并将带作用域的包发布到 npm 注册表 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 React Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「发布到 npm 与语义化版本控制」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 React Academy 课中编写并运行代码吗?

能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 Rollup 和 tsup 为库打包
  2. ESM 与 CJS 双格式包输出
  3. 对等依赖与树摇
  4. 发布到 npm 与语义化版本控制
← 返回 React Academy