package.json改了队友不知道?利用 Git钩子自动同步依赖,告别开发环境混乱!

366 阅读1分钟

在前端多人开发的时候,遇到个痛点,团队中某个开发者更改了 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,零依赖,有需要的朋友可以看看。

文档地址