npm version が pre-commit フックで失敗する問題の原因と解決策

npm パッケージのリリース時に np や npm version コマンドを使用していると、pre-commit フックでエラーが発生してリリースプロセスが中断されることがあります。本記事では、その原因と解決策について […]

広告ここから
広告ここまで

目次

    npm パッケージのリリース時に np や npm version コマンドを使用していると、pre-commit フックでエラーが発生してリリースプロセスが中断されることがあります。本記事では、その原因と解決策について紹介します。

    pre-commitでリントエラーが起きたケース

    npm run release(内部で np を実行)を実行したとき、以下のようなエラーが発生してバージョン更新が失敗することがあります。

    ✖ Bumping version
      → Command failed with exit code 1: npm version 0.3.0
    

    今回のケースでは、エラーログを確認すると、pre-commit フックにおける Biome の lint チェックが失敗していました。ログを見ると、package.jsonに対するLintエラーの様子です。

    npm error > [email protected] lint
    npm error > biome check .
    npm error
    npm error ./package.json format ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    npm error
    npm error   × Formatter would have printed the following content:
    npm error   
    npm error     14 14 │       }
    npm error     15 15 │     },
    npm error     16    │ - ··"files":·[
    npm error     17    │ - ····"dist",
    npm error     18    │ - ····"src"
    npm error     19    │ - ··],
    npm error        16 │ + ··"files":["dist", "src"],
    npm error     20 17 │     "engines": {
    npm error     21 18 │       "node": ">=18"
    npm error
    npm error husky - pre-commit script failed (code 1)
    

    Biome は package.jsonfiles フィールドが1行で記述されることを期待していますが、npm version コマンドが複数行形式で書き込んでいるためフォーマットエラーが発生しています。

    npm versionとBiomeの衝突が原因

    npm versionpacakge.jsonを更新します。その際の変更がBiome側の期待するフォーマットと一致していない場合、npm version直後はBiomeによるLintがfailやすくなります。そしてこのケースでpre-commitフックにLintを含めている場合、この問題が原因でnpm versionによるバージョン変更のコミットがfailするということでした。

    Lintでfailしないようにする

    pre-commit フックを修正し、フォーマットを自動修正してから lint チェックを実行するように変更します。

    修正前の設定は以下の通りです。

    npm run lint
    

    これを以下のように変更します。

    npm run format && npm run lint
    

    この修正によって何が変わるでしょうか。npm version がフォーマットに合わない形式で package.json を書き込んでも、pre-commit フックで npm run format が実行されて自動的にフォーマットが修正されます。その後 npm run lint が実行されエラーなく通過するため、コミットが成功して npm version も正常に完了します。

    動作確認

    修正後、npm version patch --dry-run を実行すると正常に動作することを確認できます。

    $ npm version patch --dry-run
    v0.1.2
    

    pre-commit フックも正常に通過し、フォーマットが自動修正されていることが確認できました。

    まとめ

    npm version が pre-commit フックで失敗する問題は、npm version が Biome のフォーマットルールに合わない形式で package.json を書き込むことが原因でした。pre-commit フックで lint チェックを実行する前にフォーマットを自動修正するよう設定を変更することで、この問題を解決できます。

    この修正により、npm version や np を使用したリリースプロセスが正常に動作するようになります。

    参考

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark