TL;DR
pre-commit フックの中で、ステージングされたファイルだけにコマンドを実行するツール。Husky と一緒に使うことが多い。
なぜ必要か
Commit のたびにすべてのファイルを検査すると時間がかかる。lint-staged を使えば、変更したファイルだけを対象にできる。
仕組み
package.json に lint-staged の項目を足し、glob パターンと、それに当てはまるステージング済みのファイルに実行するコマンドの一覧を対応させる。そのうえで、.husky/pre-commit のコマンドを npx lint-staged に置き換える。
Commit したとき、glob パターンに当てはまるファイルがなければ pre-commit フックは飛ばされる。当てはまれば、対応するコマンドが実行される。
例
npm install --save-dev lint-staged{
"lint-staged": {
"*.{js,cjs,ts,tsx}": [
"vitest related --run",
"eslint --fix",
"stylelint --fix",
"prettier --write"
]
}
}vitest related は、ステージングされたファイルの依存ツリーに含まれるテストだけを実行する(Vitest)。
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npx lint-staged$ git commit -a -m ":wrench: Use lint-staged to optimize pre-commit hook"
→ No staged files match any configured task.
$ git commit -a -m ":wrench: Add comment to Carousel component"
✔ Preparing lint-staged...
✔ Running tasks for staged files...
✔ Applying modifications from tasks...
✔ Cleaning up temporary files...