使用沙哑的git存储库中的多个锁定文件
#javascript #npm #yarn #husky

在GIT存储库上进行合作时,一个普遍的挑战是多个锁定文件(例如yarn.lockpackage-lock.json)的存在,导致依赖性管理的不一致。开发人员在添加新软件包时可能会在不知不觉中生成这些文件,偶尔,我们可能会复制一个安装命令,该命令使用与项目中使用的软件包管理器不同。虽然在打开拉动请求或在代码审查期间,我们将在稍后发现这些问题,但我相信,在我们的本地存储库中抓住它们会更有益。较早发现这些差异将节省团队的时间和精力。最重要的是,如果我们可以利用可以在每个提交中提醒我们这件事的工具,那为什么不

为了解决这个问题并确保无缝的开发经验,我们可以利用沙哑,这是管理Git挂钩的强大工具。在本文中,我们将引导您设置沙哑,以自动防止多个锁定文件被推到您的git存储库中。

什么是沙哑?

沙哑的人使我们能够轻松地管理git钩。 git挂钩是在GIT工作流程中的特定点自动运行的脚本,例如预先承诺或预算。通过利用沙哑,我们可以在提交或推出代码,促进代码质量并防止潜在问题之前执行行动。

步骤1:安装沙哑和棉绒阶段

要开始,将赫斯基和绒毛阶段安装为项目中的开发依赖项。 Lint阶段是另一种与Husky携手合作的工具,以确保仅在分阶段文件上运行GIT挂钩。实际上,我们不需要绒毛段是为了我们的目的,因为检查多个锁定文件的存在通常无法通过对上演文件进行检查来完成,因为大多数情况下,锁定文件之一(旧文件)从未上演过。但是,由于我们通常也会使用Husky来检查Eslint和更漂亮的问题,因此,如果您已经在项目中配置了Eslint或更漂亮的,或者您将来想这样做,我建议您安装棉绒阶段。请关注this article,以获取有关沙哑和绒毛阶段的标准整合的更多信息。
在您的终端中运行以下命令,以安装沙哑和绒毛阶段:
yarn install husky lint-staged - save-dev

并初始化项目中的沙哑,运行:
npx husky install

步骤2:配置沙哑和棉绒阶段

在沙哑的安装和初始化后,您应该在根文件夹中自动创建一个.husky文件夹。接下来,使用Husky和Lint阶段设置GIT预先承诺的钩子。打开.husky文件夹并创建一个名为pre-commit的文件,其中包含以下内容:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

node check-lock-files
npx lint-staged

在此配置中:

  • 我们正在设置一个运行自定义脚本check-lock-files.js的git pre-commit挂钩。该脚本将负责检查yarn.lockpackage-lock.json文件的存在,并在两者都存在的情况下丢弃错误。
  • 第二个命令,npx lint阶段的词汇阶段config文件(lint-starged.config.js,我们将在稍后讨论),并将在根文件夹中进行,并将在每个阶段文件上运行。对于我的用例,我已经使用了以下规则(如果您已经有打字稿,ESLINT和PRITIER配置了):可以使用此规则):
module.exports = {
  // This will check Typescript files
  "**/*.(ts|tsx)": () => "yarn tsc --noEmit",

  // This will lint and format TypeScript and JavaScript files
  "**/*.(ts|tsx|js)": (filenames) => [
    `yarn eslint --fix ${filenames.join(" ")}`,
    `yarn prettier --write ${filenames.join(" ")}`,
  ],

  // This will format MarkDown and JSON
  "**/*.(md|json)": (filenames) =>
    `yarn prettier --write ${filenames.join(" ")}`,
};

,但正如我之前说的,您可以将其配置为您的需要,并且可以将this article作为参考。

步骤3:创建自定义脚本

现在,让我们创建自定义脚本check-lock-files。该脚本将检查yarn.lockpackage-lock.json文件的存在,并在发现两者的情况下防止提交。在您的项目的根目录中创建一个名为check-lock-files.js的新文件,其中包含以下内容:

const fs = require("fs");
const lockFiles = ["yarn.lock", "package-lock.json"];
const foundLockFiles = lockFiles.filter((lockFile) => {
  return fs.existsSync(lockFile);
});
if (foundLockFiles.length === 2) {
  console.error(
    "Error: Both yarn.lock and package-lock.json found in the repository. 
     Please include only one lock file and try again."
  );
  process.exit(1);
}

步骤4:使脚本可执行

通过运行以下命令来确保自定义脚本可执行:
chmod +x check-lock-files.js

步骤5:测试实施

创建第二个锁定文件 - 我已经有一个yarn.lock文件,因此我在项目的根目录中创建一个空的package-lock.json文件。使用git add package-lock.jsongit add .命令进行更改。
尝试通过测试消息进行更改:
git commit -m "test husky config"

终端现在应显示以下错误:

Pre-commit hook checking for multiple lock files

注释与您的团队交流此沙哑的配置,确保配置合并并在主分支中可用,并在其他开发人员更新其代码库时向其他开发人员的本地存储库传播,使整个团队保持一致。

ð快乐编码!