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