在前端多人开发的时候,遇到个痛点,团队中某个开发者更改了 package.json 中的依赖版本,合并到主分支后。其他开发者如果不知道,本地会使用旧依赖开发,很容易引发效果不一致和不必要的沟通问题。
这个痛点解决起来也简单,大部分成熟的项目都装有 simple-git-hooks 或者 Husky,可以在执行 Git 命令的时候做一些额外操作。
// package.json
{
"simple-git-hooks": {
// 在 git commit 前 lint 和检查代码
"pre-commit": "pnpm lint-staged && pnpm check",
// 校验 git commit message 是否符合规范
"commit-msg": "node scripts/verify-commit.js"
},
}
Git 有一个 post-merge 钩子,在 Git 执行 git merge 或 git pull(本质上包含合并操作)成功完成后自动触发的脚本。它属于 Git 钩子(hooks)机制的一部分,用于在合并操作结束后执行自定义任务。
我们可以利用这个钩子编写一个脚本,在拉取代码检查是否有 pnpm-lock.yaml 文件更改。git diff --name-only ORIG_HEAD HEAD 可以查看最近一次合并或重置操作前后发生变化的文件列表。
git diff --name-only ORIG_HEAD HEAD
## 输出
public/assets/images/banner.png
package.json
pnpm-lock.yaml
一旦变更文件包含 pnpm-lock.yaml 就在提示用户有依赖需要更新。并且可以可以扩展一下,发现需要更新自动执行 install 命令。
脚本很简单,整理好思路直接利用 AI 生成了 npm 库 lockfile-sync-check,配合 simple-git-hooks 可以实现拉取完主分支代码检测 lock 文件有变更,直接执行 pnpm install。
{
"simple-git-hooks": {
"post-merge": "lockfile-sync-check pnpm --install"
}
}
支持 pnpm npm yarn,零依赖,有需要的朋友可以看看。