【JavaScript】コミットする前にlint-stagedでeslintのチェックをする
eslintの設定をしたけど、eslintの警告やエラーを無視したままコミットしてしまった...ということがありました。
できれば、git add 〜
→git commit 〜
する際にeslintによるチェックをかけて、commitできないようにしておきたい...
と思っていたら、実際にできましたので、その手順をメモしておきます。
この記事はなに? 🤔
この記事は、lint-staged
とhusky
を使い、git commit
のタイミングでeslintによるチェックを実施し、エラーだったらコミットさせない設定をした際の手順を記載します。
以下参考文献になります。
- Qiita - コミット前に Lint を強制するなら lint-staged が便利
- GitHub - okonet/lint-staged: 🚫💩 — Run linters on git staged files
- GitHub - typicode/husky: 🐶 Git hooks made easy
環境
環境は以下になります。
- macOS Mojave
- Node.js 12.2.0
- yarn
仕組み
参考記事等から、ざっくり以下のような仕組みであると解釈しました。
git commit
時に発生するGitフック「pre-commit」をhusky
でハンドリングlint-staged
で実行したいlint系コマンドを実施するlint-staged
でGitのステージに上がっているファイルを対象にeslint
等のコマンドを実行できる
Gitフックについては、以下の記事をご参照ください。🙏
手順
下記のリポジトリ(コミット履歴)を元に手順を記載していきます。結構簡単です。
必要なプラグインの導入
yarn add -D
で、必要なnpmモジュールを導入していきます。
# 必要なプラグインの導入 yarn add -D eslint lint-staged husky
package.jsonの設定
- lint-staged - README#Examples
- lint-staged - README#automatically-fix-code-style-with---fix-and-add-to-commit
lint-staged
のREADME上記記載を元に、package.json
へ以下を追記します。
{ "husky": { "hooks": { "pre-commit": "lint-staged" } }, "lint-staged": { "linters": { "*.js": [ "eslint --fix", "git add" ] }, "ignore": [ "dist/**/*" ] } }
linters
には、eslint対象のファイル拡張子とeslint --fix
/git add
のコマンドを記載します。
ignore
はlint-staged
に記載したeslint --fix
から対象外とするパス、ファイルを記載します。
これだけで設定完了となります。
テスト
実際にチェックがかかるかテストしてみます。
src/index.js
対して、console.log
を追記し、no-console
のeslintエラーが発生する状態でコミットしてみます。
$ git status On branch test Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: src/index.js $ git commit -m "test" husky > pre-commit (node v12.2.0) ↓ Stashing changes... [skipped] → No partially staged files found... ❯ Running linters... ❯ Running tasks for *.js ✖ eslint --fix git add ✖ eslint --fix found some errors. Please fix them and try committing again. /Users/yazakiyuuki/work/webpack-practice/webpack-crash-course/src/index.js 13:1 error Unexpected console statement no-console ✖ 1 problem (1 error, 0 warnings) husky > pre-commit hook failed (add --no-verify to bypass) $ git status On branch test Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: src/index.js $
このように、eslintのチェックが走り、git commit
できないことが確認できました。
おわり
間違い、誤記等などありましたら、FBいただけると助かります!🙇♂️
参考文献
参考文献のまとめです。