Следующий скрипт был написан для сортировки файлов 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
precommit hook:
"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
.
Спасибо!
sync
функции. Так что, если вы используетеfs.readdirSync()
, он должен работать. Использование версииasync
, скорее всего, ничего не улучшит в этом сценарии. - person adelriosantiago   schedule 16.08.2020