🐳

huskyのv8とv9の違いを確認しつつ、npm scriptsを理解する

2024/12/31に公開

概要

husky がずっとv4のプロジェクトがあるので、 Node.js のバージョンアップに合わせてアップデートをしようとしました。
2024/1/25にv9.0.1がリリースされていたので違いを確認しつつ、 npm について理解したことをまとめます。

v8とv9の違い

Release Note

https://github.com/typicode/husky/releases/tag/v9.0.1

v9に変わり、インストール時のコマンドが一つで済むようになり、 .husky/pre-commit もシンプルになっています。

例えば、v8のインストール手順のコマンドは以下です。

npm pkg set scripts.prepare="husky install"
npm run prepare
npx husky add .husky/pre-commit "npm test"

v9では上記のコマンドは以下で全て実行されます

npx husky init

他には、v9にあたり Node.js のv14とv16のサポートが外れ、v18以上の engines の指定が追加されています。

npm について

npm-pkg

https://docs.npmjs.com/cli/v10/commands/npm-pkg

package.json の読み書きができます.

example
npm pkg set version=1.0.1
npm pkg get version
# 1.0.1

つまり、huskyの最初のコマンドは scripts に prepare として husky install を設定しています

npm pkg set scripts.prepare="husky install"

npm-scripts

https://docs.npmjs.com/cli/v10/using-npm/scripts

公式のサンプルですが、基本的な考え方として Pre/Post の接頭辞を定義することで、 scripts の実行前後に処理を実行することができます

公式サンプル
{
  "scripts": {
    "precompress": "{{ executes BEFORE the `compress` script }}",
    "compress": "{{ run command to compress files }}",
    "postcompress": "{{ executes AFTER `compress` script }}"
  }
}

これとは別に特別なライフサイクルイベントとして、いくつか他の scripts が存在し、 prepare はその一つです。
preapare が組み込まれている scripts は以下です。実行順序は公式ドキュメントを確認してください

  • npm cache add
  • npm ci
  • npm diff
  • npm install
  • npm pack
  • npm publish
  • npm rebuild

インストール時や成果物生成の時に常に実行される scripts のようです
このため、複数人で開発する時にきちんと git-hooks の設定がおこなわれることになります

サンプルコード

https://github.com/shikazuki/husky-sandbox

Discussion