0 依赖 1 行命令发布 NPM 项目

243 阅读2分钟

无情的推动自动化

简版 2021 年

package.json 中通过钩子实现一行命令 npm version major / minor / patch 发布到 NPM。

  "scripts": {
    "test": "jest --coverage",
    "build": "tsc --declaration"
+   "preversion": "npm test && npm run build",
+   "postversion": "npm publish && git push && git push --tags",
  }

发布只需执行

npm version major/minor/patch

将自动在发布前完成测试和构建,如果失败则不会更新版本和发布。且发布后自动 push 代码和 tag 到远端 👍。

完善版 2025-5-23

{
  "scripts": {
    "========== Publishing ==========": "",
    "pub:patch": "npm version patch",
    "pub:minor": "npm version minor",
    "pub:major": "npm version major",
    "preversion": "nvm use 22 && git pull && git push origin HEAD && pnpm i && npm run build",
    "postversion": "npm publish && git push origin HEAD && git push --tags",
    "prebuild": "concurrently -n 🧪,🔍 -p name \"npm run test:cov\" \"npm run lint\"",
    "publishd": "npm publish --dry-run",
  }
}

发布命令

bun pub:major/pub:minor/pub:patch

将在发布前:

  • 自动切换到指定 node.js 版本
  • 拉取最新代码并 push 到远端。确保 Git 状态清洁。
  • 安装最新依赖:防止他人代码修改发布用了老代码或者老依赖,。
  • 执行测试lint(性能考虑二者并行)以及构建:如果失败则不会执行无谓的构建和更新 tag 版本以及发布。
  • 发布后自动 push 代码和 tag 到远端
  • publishd:模拟发布过程将输出即将发布的文件。确认发布文件都已完备。

后记

当然推荐使用流水线发布,但如果本地要发布的话,要保障“安全性”,需要执行单测、拉取最新代码重装依赖等,尽量模拟 CI 发布。

1. 可以有一个改善,通过 publishd 检查前后两次发布删除以及新增的文件,如果删除新增文件超过某个阈值则提醒发布者是否继续发布。“血淋淋”的发布问题,某次修改了 files 或者 .gitignore 少发布了大量文件,导致引用了最新版本的项目出现了问题。这里没有实现该功能,大家可以探究下。

2. np Sindre Sorhus 写的一个优 npm publish 替代工具,提供交互式界面、自动运行测试、确保 Git 状态清洁等功能。 因为我不想为了发布而额外安装一个包,本文的标题是“0 依赖”。若大家感兴趣也可尝试下。