Добавляем lint-staged в NestJS и Angular приложения, включаем семантическое версионирование фронтенда
Так как версионирование через плагин nx-semantic-release
происходит путем анализа изменений по связанным Typescript
-импортам, то нам нужно минимизировать эти изменения, для этого в проект подключаем lint-staged
и добавляем строгости в Typescript
-код.
1. Добавляем lint-staged для форматирования кода при коммите
Эта утилита запускает опреде ленные скрипты при каждом коммите, для того чтобы форматирование кода в git
-репозитории было всегда одинаковым и не важно как именно разработчик настроил свою локальную среду разработки.
Команды
npx mrm@2 lint-staged
Вывод консоли
$ npx mrm@2 lint-staged
Running lint-staged...
Update package.json
Installing husky...
added 1 package, removed 1 package, and audited 2765 packages in 18s
331 packages are looking for funding
run `npm fund` for details
49 vulnerabilities (31 moderate, 18 high)
To address issues that do not require attention, run:
npm audit fix
To address all issues possible (including breaking changes), run:
npm audit fix --force
Some issues need review, and may require choosing
a different dependency.
Run `npm audit` for details.
husky - Git hooks installed
husky - created .husky/pre-commit
2. Обновляем prepare скрипт и секцию lint-staged в корневом package.json
Скрипт prepare
автоматически п оявляется после установки lint-staged
, я не стал его убирать просто немного изменил способ запуска, запускаю через npx
.
В небольших проектах pre-commit
-хук с lint-staged
отрабатывает быстро, но если проект большой то он может работать дольше, в таком случаи проще всем разработчикам договориться об общем стиле форматирования, для того чтобы уменьшить количество файлов которые необходимо будет проверить линтерам.
В pre-commit
-хук не стоит прописывать различные тяжелые операции, например: генерацию фронтенд клиента, такие операции лучше производить в CI/CD
или локально руками по необходимости, а не на каждый коммит.
Обновляем часть файла package.json
{
"scripts": {
// ...
"prepare": "npx -y husky install"
// ...
},
// ...
"lint-staged": {
"*.{js,ts}": "eslint --fix",
"*.{js,ts,css,scss,md}": "prettier --ignore-unknown --write",
"*.js": "eslint --cache --fix"
}
// ...
}