ARTICLE DETAIL

资讯详情

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

Mongoose 版本发布全流程指南:从测试、CHANGELOG 到 npm 与官网自动部署

Mongoose 版本发布全流程指南:从测试、CHANGELOG 到 npm 与官网自动部署 Mongoose 版本发布全流程指南从测试、CHANGELOG 到 npm 与官网自动部署【免费下载链接】mongooseMongoDB object modeling designed to work in an asynchronous environment.项目地址: https://gitcode.com/GitHub_Trending/mo/mongoose导读本文基于 mongoose 仓库根目录的 release-items.md 发布清单系统梳理 mongoose 从代码冻结到 npm 上线、再到官网文档更新的完整发布流程。你将掌握 9.x 主线版本与 8.x 遗留分支legacy release各自的发布节奏、GitHub Release 触发 npm 自动发布的底层机制以及大版本major release切换时需要同步处理的文档与分支事项并了解如何用仓库内真实存在的脚本命令npm run docs:prepare:publish:stable、npm publish等落地每一步操作。一、发布前置质量门槛与 CI 测试矩阵mongoose 发布流程的第一步是确保测试全部通过release-items.md 第 1 条。这不是一句空话仓库通过 GitHub Actions 配置了多维度测试矩阵来把关。从 .github/workflows/test.yml 可以看到push与pull_request到master时只要涉及lib/**、test/**、index.js、package.json等核心路径变更就会触发如下测试组合Node.js 版本20、22、24与 package.json 中engines.node 20.19.0的要求对应MongoDB 版本6.0.15、7.0.12、8.2.0操作系统ubuntu-22.04、ubuntu-24.04其中一组ubuntu-22.04 MongoDB 6.0.15 Node 22会额外收集覆盖率npm run test-coverage:ci即c8报告。对应到本地可用以下命令复现部分验证# 完整测试默认跳过加密相关测试 npm test # CI 精简模式最小 reporter 10s 超时 npm run test:ci # 副本集模式测试事务相关功能需要 npm run test-rs:ci # 类型测试tstyche npm run test:types # 加密相关测试需先执行 setup-test-encryption npm run test-encryption:ci # 代码规范检查 npm run lint npm run lint-ts此外发布前还建议执行npm run docs:test等价于npm run docs:generate确保文档站点能正常生成——这一点与后面“更新官网”环节直接相关。二、版本号与 CHANGELOG 管理测试通过后进入发布流程的第 2、3 步更新package.json与锁文件的版本号并更新CHANGELOG.md。2.1 版本号当前仓库 package.json 的版本为9.9.5这也是本文写作时 9.x 主线的示例版本。发布时需将该字段以及锁文件中的对应版本改为新版本号例如9.9.6。语义化版本号在 mongoose 中遵循常规惯例major.minor.patch大版本变更通常意味着破坏性 API 调整对应migrating_to_x.md迁移指南。2.2 CHANGELOG 格式从 CHANGELOG.md 开头可以看到真实条目结构以9.9.5 / 2026-09-04为例9.9.5 / 2026-09-04 * fix(query): pass schema through when casting a nested $expr comparison #16496 rajanpanth * fix(projection): build the dotted path correctly in isPathSelectedInclusive #16495 rajanpanth * fix(document): replace {MODEL} in custom cast error messages from document validation #16480 #8300 AbinMadathil-Celigo * types(model): add missing properties to listSearchIndexes() return type #16486 lazerg写入新版本条目时需要遵守的约定release-items.md 第 3 条每条变更以*开头注明所属模块例如fix(query)、fix(document)、perf(model)、docs、types(model)必须附带 GitHub Issue/PR 编号如#16496方便检索与回溯如该修复由社区贡献者完成附上其 GitHub 用户名链接如[rajanpanth](https://github.com/rajanpanth)从 CHANGELOG 可见 9.x 与 8.x 条目是并列维护的如8.24.4 / 2026-08-21每个发布分支各写各的条目。三、提交与打 Tag发布动作落地CHANGELOG 与版本号更新完成后进入第 4、5 步——提交并打标签git commit -a -m release x.x.x git tag x.x.x其中x.x.x替换为实际版本号例如9.9.6。git tag的标签名与版本号保持一致后续 GitHub Release 与 npm 发布的版本识别都依赖它。紧接着的npm run release脚本定义在 package.json把收尾动作脚本化release: git pull git push origin master --tags npm publish即拉取最新远端状态 → 推送 master 分支及全部 tags → 发布到 npm。对于遗留分支仓库还提供了对应的专用脚本release-5x: git pull origin 5.x git push origin 5.x git push origin 5.x --tags npm publish --tag 5x release-6x: git pull origin 6.x git push origin 6.x git push origin 6.x --tags npm publish --tag 6x publish-7x: npm publish --tag 7x注意遗留分支发布时使用npm publish --tag 5x/6x/7x这类非 latest 的 dist-tag避免老版本覆盖 npm 上的最新标签。四、GitHub Release 与 npm 自动发布发布流程第 6 步明确指出在 GitHub 上创建新 Release 后8.x 与 9.x 会自动部署到 npm。这一自动化由 .github/workflows/publish.yml 实现其关键配置如下name: Publish Package to npmjs on: release: types: [published] # 监听 GitHub Release 的 published 事件 workflow_dispatch: # 也支持在 Actions 页面手动触发 jobs: publish: runs-on: ubuntu-latest permissions: contents: read id-token: write # 用于 npm provenance来源证明 steps: - uses: actions/checkoutv7.0.1 - uses: actions/setup-nodev7.0.0 with: node-version: 24.x registry-url: https://registry.npmjs.org - run: npm install - run: npm publish --provenance --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}从中可以提炼几个与发布直接相关的要点触发时机release: published即在 GitHub 上正式发布而非 draftRelease 时才执行发布方式npm publish --provenance --access public--provenance表示启用 npm 的软件来源证明与工作流中的id-token: write权限配合--access public声明公开包凭据管理通过 GitHub Actions Secrets 中的NPM_TOKEN注入 npm 认证不暴露明文 tokenNode 版本CI 发布环境固定使用 Node 24.x。因此日常发布的主路径是本地打 tag → 推送到 GitHub → 在 GitHub Releases 页面基于该 tag 创建 Release → Actions 自动完成 npm 发布。npm run release脚本中的npm publish则可视为兜底/手动方案。五、更新官网文档updating the website发布流程第 7 步要求同步更新官网 mongoosejs.com。仓库通过一系列docs:*npm 脚本管理文档构建核心命令在 package.json 中5.1 9.x 主线stable按 release-items.md 的步骤执行# 0. 切换到 master 分支 git checkout master # 1. 执行发布构建完成后会自动切到 gh-pages 分支 npm run docs:prepare:publish:stable # 2. 提交并推送 gh-pages 分支 git commit -a -m chore: website 9.x.x git push origin gh-pagesdocs:prepare:publish:stable的实际定义是docs:prepare:publish:stable: git checkout gh-pages git merge master env GENERATE_SEARCHtrue npm run docs:generate即切到gh-pages分支 → 把master合并进来 → 以开启搜索索引生成GENERATE_SEARCHtrue的方式执行docs:generate底层是 scripts/website.js 的node ./scripts/website.js。gh-pages分支即官网静态站点的发布载体推送后由 GitHub Pages 对外提供服务。5.2 8.x 遗留分支legacy# 0. 切换到 8.x 分支 git checkout 8.x # 1. 执行 8.x 发布构建完成后会自动切到 gh-pages 分支 npm run docs:prepare:publish:8x # 2. 提交并推送 git commit -a -m chore: website 8.x.x git push origin gh-pagesdocs:prepare:publish:8x的定义为docs:prepare:publish:8x: env DOCS_DEPLOYtrue npm run docs:generate git checkout gh-pages rm -rf ./docs/8.x mv ./tmp ./docs/8.x可以看到8.x 文档会作为多版本文档站点中的一个子目录docs/8.x发布到gh-pages而不是覆盖当前 stable 文档9.x 的 stable 构建则直接更新站点根文档。这正是 mongoosejs.com 能同时提供多个大版本文档的实现方式。5.3 本地预览与链接检查发布前可用以下脚本本地验证文档# 生成文档 npm run docs:generate # 本地静态服务预览 npm run docs:view # 启动本地服务后检查死链跳过广告与历史版本目录 npm run docs:check-links另外 .github/workflows/documentation.yml 会在 PR 与 master push 时自动跑npm run lint-mdmarkdownlint与npm run docs:generate的生成冒烟测试进一步保证官网构建可复现。六、大版本Major Release的专项流程当发布的是破坏性大版本如 8.x → 9.x时release-items.md 的 “major releases” 一节给出了 4 项额外工作每一项都能在当前仓库中找到对应产物编写迁移指南创建docs/migrating_to_x.md。仓库中已存在 docs/migrating_to_5.md、docs/migrating_to_6.md、docs/migrating_to_7.md、docs/migrating_to_8.md、docs/migrating_to_9.md说明历史上每个大版本都配套了独立的迁移文档更新站点默认版本修改docs/js/search.js中的默认版本常量。当前该文件第 5 行为const defaultVersion 9.x;发布新大版本时应将其指向新版本如10.x同时其下方代码会根据 URL 路径/docs/(\d\.x)自动切换到对应版本的搜索索引为上一大版本创建遗留分支例如9.x供后续 legacy release 使用调整上一大版本分支的发布工作流修改该分支如9.x上的publish.yml使其发布到非 latest 的 npm dist-tag如9x避免覆盖最新版本标签。这一点与 package.json 中现存的release-5x/release-6x/publish-7x脚本的--tag用法一脉相承。七、发布收尾公告与遗留分支合并发布流程的最后几步第 810 条是典型的开源项目宣发与收尾动作在 Twitter/X 上发布 CHANGELOG 链接官方账号 mongoosejs在 mongoosejsteam 的 Slack 频道公告如果本次是遗留版本legacy release需要把变更git merge回master主分支保证主线的历史完整、修复不丢失。从 CHANGELOG.md 中 8.x 条目标注的(8.x backport)字样可以看出遗留分支的修复通常来自主线代码的回迁backport因此发布后再合并回 master 属于双向同步确保两条版本线最终一致。八、发布流程速查表与注意事项综合全文一次完整的 9.x 主线发布可浓缩为以下清单阶段动作关键命令/产物1. 质量门禁全量测试通过npm test/npm run test:ci/npm run test:types2. 版本更新修改版本号package.json 与锁文件3. CHANGELOG新增版本条目附 issue 号与贡献者CHANGELOG.md4. 提交提交变更git commit -a -m release x.x.x5. 打 tag打版本标签git tag x.x.x6. npm 发布GitHub 建 Release 自动发布.github/workflows/publish.yml或npm run release7. 更新官网发布文档站点npm run docs:prepare:publish:stablegit push origin gh-pages810. 公告与同步发推、Slack 公告、遗留版本合并回 master—注意事项遗留分支如 8.x的官网发布使用npm run docs:prepare:publish:8x产物进入gh-pages的docs/8.x子目录与 stable 版本互不覆盖遗留分支的 npm 发布务必使用非 latest 的 dist-tag如8x、9x避免污染最新版标签大版本发布前务必完成迁移文档、搜索默认版本、遗留分支与发布工作流四项配套工作缺一不可整个流程的自动化依据均可在仓库中核实发布触发见 .github/workflows/publish.yml文档构建见 package.json 的docs:*脚本与 scripts/website.js默认版本常量见 docs/js/search.js历史版本条目见 CHANGELOG.md。【免费下载链接】mongooseMongoDB object modeling designed to work in an asynchronous environment.项目地址: https://gitcode.com/GitHub_Trending/mo/mongoose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表