如何解决赫斯基预提交钩在提交后完成
编写以下脚本是为了按预提交挂钩上的键对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`
)
);
我正在使用package.json
预提交钩子将脚本附加到我的husky
:
"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
挂钩中。
现在一切正常。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。