Husky 预提交挂钩在提交后完成

Husky pre-commit hook finishes after commit

编写以下脚本是为了在预提交挂钩上按键对 JSON 文件进行排序:

 /*
 * Will reorder all files in given path.
 */

const sortJson = require("sort-json");
const fs = require("fs");
const chalk = require("chalk");

const log = console.log;
const translationsPath = process.argv.slice(2).join(" ");

function readFiles(dirname) {
  try {
    return fs.readdirSync(dirname);
  } catch (e) {
    log(chalk.red(`Failed reading files from path; ${e}`));
  }
}

log(
  chalk.bgGreen(
    `Running json sort pre-commit hook on path: ${translationsPath}`
  )
);

const files = readFiles(translationsPath);
files.forEach((file) => {
  log(chalk.yellow(`Sorting ${file}...`));
  try {
    sortJson.overwrite(`${translationsPath}\${file}`);
    log(chalk.green(`Finished sorting ${file}`));
  } catch (e) {
    log(chalk.red(`Failed sorting file ${file}; ${e}`));
  }
});

log(
  chalk.bgGreen(
    `Finished sorting files`
  )
);

我正在使用 husky 预提交挂钩将脚本附加到我的 package.json

  "scripts": {
    "sort-translations": "node ./scripts/husky/json-sort src/assets/translations",
    ...
  },
  "husky": {
    "hooks": {
      "pre-commit": "npm run sort-translations"
    }
  },

结果是提交完成,然后脚本才完成创建的未暂存更改。 脚本本身与最后打印的 Finished sorting files 消息同步运行。

我的问题是,如何让它同步;先完成 运行 node ./scripts/husky/json-sort src/assets/translations,然后 git commit.

谢谢!

感谢@adelriosantiago 的评论,我明白了。

  1. 首先,我开始使用readdirSync()而不是readdir()。然后我能够(通过日志记录)验证脚本确实仅在文件被编辑时结束。不幸的是,这还不够 - 挂钩仍然以未提交的文件结束。
  2. 在这一点上我意识到 - 这不是关于钩子,而是关于 git 舞台!脚本按时结束,但修改后的更改仍未暂存,因此未提交。所以我添加了 && git add src/assets/translationspre-commit 钩子。

现在一切正常。