npm i -D husky lint-staged
npx husky init
npx husky install
.husky/ディレクトリ内の pre-commit に作成する
echo "npx lint-staged" > .husky/pre-commit
huskyの設定を書ける箇所
1. package.json
2. .huskyrc
3. husky.config.js
4. .husky/ディレクトリ
lint-stagedの設定を書ける箇所
1. package.json
2. .lintstagedrc
package.json
{
"lint-staged": {
"*": "your-cmd"
}
}
.lintstagedrc
{
"*": "your-cmd"
}
concurrent
: デフォルトは true
です。リンターコマンドを並列で実行するかどうかを制御します。false
に設定すると、リンターコマンドは逐次的に実行されます。chunkSize
: 並列処理のチャンクサイズを設定します。デフォルトは maxCpuCount - 1
です。小さな値に設定すると、より多くのプロセスが作成されますが、OOMのリスクが高くなります。globOptions
: グロブパターンのオプションを指定します。たとえば { dot: true }
とすると、ドットファイルも対象に含まれます。ignore
: 無視するパターンを指定します。配列で複数指定できます。linters
: リンターの実行順序を制御します。デフォルトではリンターは並列実行されますが、このオプションで順序付けることができます。matching
: ファイルのマッチングパターンを制御します。デフォルトは ["**/*"]
です。relative
: ワーキングディレクトリを基準にするか、プロジェクトルートを基準にするかを指定します。デフォルトは true
です。shell
: コマンドを実行するシェルを指定します。デフォルトは /bin/sh
です。verbose
: 詳細なログを出力するかどうかを指定します。デフォルトは false
です。subTaskConcurrency
: タスクの並列実行数を指定します。デフォルトは 1
です。src/components/Hello.tsx
const Home = () => {
let unused = 'hello';
return (
<div>
<h1>Hello World</h1>
</div>
);
};
npm run lint
git add -A
git commit
git commit
✖ No valid configuration found.
husky - pre-commit script failed (code 1)
lint-staged は設定したタスク(コマンド)の終了コードが 0 以外の場合、gitコミットをキャンセルする。という手法で動いています。
そこで実行したいタスクの終了コードがエラー時に 0以外を返すかどうかは調べておきましょう。
npx eslint --fix src/MyComponent.tsx; echo "ESLint exit code: $?"