У меня есть эти 2 сценария в моем package.json
файле:
"get-staged-files": "git diff --name-only --staged --diff-filter=d | grep \".*\\.ts\\(x\\)\\?\" | sed 'N;s/\\n/ /'",
"lint-staged-files": "yarn --silent get-staged-files | xargs ./node_modules/eslint/bin/eslint.js"
, а также в этом хаски-разделе:
"husky": {
"hooks": {
"pre-commit": "yarn lint-staged-files"
}
}
по какой-то причине, когда я пытаюсь зафиксировать, я получаю следующая ошибка:
No files matching the pattern "src/api/blabla/file_name.ts" were found
скрипт lint-staged-files
не работает, странно то, что если я запускаю значение скрипта, такое явное:
git diff --name-only --staged --diff-filter=d | grep ".*\.ts\(x\)\?" | sed 'N;s/\\n/ /' | xargs ./node_modules/eslint/bin/eslint.js
все работает нормально, похоже yarn
изменяет вывод или что-то в этом роде.
Я использую версию MacOS 10.15.3
версия пряжи 1.22.4
Обновление # 1 : после изучения вывода 2 команды с использованием more
Я нашел это:
git diff --name-only --staged --diff-filter=d | grep ".*\.ts\(x\)\?" | sed 'N;s/\\n/ /' | more
дает src/api/blabla/file_name.ts
yarn get-staged-files | more
дает ESC[1;35;40mESC[Ksrc/api/blabla/file_name.tsESC[mESC[K
Так что я думаю, что вызывает eslint
to fails - это цветовые коды консоли пряжи!
Обновление # 2 : хорошо, поэтому мне удалось решить эту проблему, удалив все цветовые коды консоли пряжи, используя sed
и perl
:
gsed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g" | perl -pe '$b="\e";s/$b//g' | gsed "s/\[1;35;40m//g"
Мне пришлось использовать perl
, потому что не удалось найти, как удалить escape-символ \e
с помощью sed
.