Honmushi blog
patch packageを使ってnpmパッケージに一時的な修正を行う2020/10/10

patch packageを使ってnpmパッケージに一時的な修正を行う

patch package の使い方のメモです。

以前に使う機会があったので、説明用にその時の手順をメモしておきます。 簡単にパッケージに対してパッチを当てることができるので、一時対応として使うことが出来ます。

patch package とは

ざっくりとは npm の postinstall を使って、node module 内のパッケージを簡単に修正できる仕組みです。

もちろん、直接 node module 内のパッケージを書き換えても良いはずです。 しかしこの場合は、npm install の際に修正内容を上書きしてしまう危険があります。他にも、node module 以下を github に push しない場合、自分の環境でのみ修正が行われて他の作業者に共有しにくいなどの状況が考えられます。

必要なパッケージについて、fork を行い自分で修正・管理して使うこともできます。しかし、元のパッケージの修正や開発に追従していくことや、リポジトリの管理が手間になってしまいます。

github

https://github.com/ds300/patch-package

使い方

まずは npm でインストールします。

npm install patch-package --save-dev

package.json に以下の記述を追加して、npm install を行った際に pacth package が実行されるように設定します。

{
  scripts: {
    "postinstall": "patch-package"
  }
}

その後、npde module 内の修正したいファイルに対して修正を行い、以下コマンドを実行します。

npx patch-package 対象のパッケージ名

すると /patches 以下に該当パッケージとバーションがファイル名になっているファイルを生成します。

これによって、npm の post install にて 実行される patch package でファイルの中身が実行され、該当のパッケージの特定のバージョンに対して修正が行われます。

このパッチファイルを github に push しておくことで、他の開発者の環境にも共有することが出来ます。

おわりに

簡単にnpmのパッケージに対してパッチ修正を行うことが出来ました。

そもそもは、このような修正をしないといけない状況はあまり良い状態ではありません。パッケージのリポジトリにissueを上げたりして、修正を行うことを考えるべきです。ほかバージョンを戻したりして正常に動くようにしたほうが安定することもあるはずです。

ただ、今すぐ直したいときや一時的な対応ということであれば仕方ない場合もあります。 使うべき状況か・他に解決方法はないかしっかり考えた上で、利用を提案していきたいです。

  • このエントリーをはてなブックマークに追加