LoginSignup
11
1

More than 3 years have passed since last update.

huskyをmonorepo環境に導入した

Last updated at Posted at 2021-01-11

ディレクトリ構成

こんな感じのmonorepo

project
- .git
- /api
- /ui (← Next.js + TypeScript)

やりたいこと

  • project/ui/ 配下で、コミットするときに、prettierやlintをフックしたい

入れたもの

  • husky 4.3.7
  • lint-staged 10.5.3

はまった点

最初、project/ui/ 配下のpackage.jsonにhuskyとlint-stagedを入れてたら、フックされなかった。
monorepoの場合、huskyはroot(.git/ と同階層)に入れておかないといけないようだ。
https://typicode.github.io/husky/#/?id=monorepo

ちなみにhuskyでなくpre-commitでやる場合も同様のようだ。
https://stackoverflow.com/questions/42864386/npm-pre-commit-not-working

これで動いた

project/package.json

  "scripts": {
    "precommit-ui": "npm run precommit --prefix ./ui"
  },
  "husky": {
    "hooks": {
      "pre-commit": [
        "npm run precommit-ui"
      ]
    }
  },
  "devDependencies": {
    "husky": "^4.3.7"
  }
project/ui/package.json
  "scripts": {
    "eslint": "eslint --ext .ts,.tsx ./",
    "format": "prettier --write ./pages",
    "precommit": "lint-staged"
  },
  "lint-staged": {
    "*.{ts,tsx}": [
      "format",
      "eslint"
    ]
  },

huskyのフックはrootのpackage.jsonに記述し、下の階層のpackage.jsonのnpm scriptを呼び出している。

まとめ

monorepoにhuskyを入れる場合、projectのrootに入れないと動かない。

11
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
1