#node.js #husky
#node.js #husky
Вопрос:
Следующий скрипт был написан для сортировки файлов 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
with husky
:
"scripts": {
"sort-translations": "node ./scripts/husky/json-sort src/assets/translations",
...
},
"husky": {
"hooks": {
"pre-commit": "npm run sort-translations"
}
},
Результатом является то, что фиксация завершена, и только тогда скрипт завершает работу с созданными изменениями unstage.
Сам скрипт выполняется синхронно с Finished sorting files
сообщением, напечатанным последним.
Мой вопрос в том, как я могу сделать это синхронным; сначала завершите выполнение node ./scripts/husky/json-sort src/assets/translations
, затем git commit
.
Спасибо!
Комментарии:
1. Поскольку это всего лишь хук предварительной фиксации, использование
sync
функций безопасно . Так что, если вы используетеfs.readdirSync()
, это должно сработать. Использованиеasync
версии, скорее всего, ничего не улучшит в этом сценарии.2. Спасибо @adelriosantiago, я изменил его на readdirSync(), но я все равно выполняю фиксацию до изменения файлов. Я отредактирую свой пост с новым кодом
Ответ №1:
Благодаря комментарию @adelriosantiago я понял это.
- Прежде всего, я начал использовать
readdirSync()
вместоreaddir()
. Затем я смог проверить (посредством протоколирования), что скрипт действительно завершается только при редактировании файлов. К сожалению, этого было недостаточно — хук по-прежнему заканчивался незафиксированными файлами. - В этот момент я понял — дело не в ху, а в промежуточной обработке git! Скрипт завершает это время, но измененные изменения остаются неизмененными, поэтому они не фиксируются. Итак, я добавил хук
amp;amp; git add src/assets/translations
вpre-commit
.
Теперь все работает так, как хотелось.