🐥

npm モジュールの依存関係を無理矢理上書きする

2024/06/05に公開

npm i xxxx でインストールするモジュールの依存関係の奥の方のモジュールでインストール時にエラーが発生してモジュール xxxx がインストールできない事案が発生。

具体的には、その奥の方のモジュールとは oracledb で、過去のバージョンでは M1 など ARMアーキテクチャの CPU を搭載した Mac ではインストール時にエラーが発生していた。

How to Install node-oracledb 5.5 and Oracle Database on Apple M1/M2 Silicon | by Christopher Jones | Oracle Developers | Medium

これを孫として、その親(つまり xxxx から見たら子)となる typeorm モジュールの古いバージョンが、上記の問題が発生する oracledb バージョンに依存しており、xxxx も古い typeorm に依存している為、M1 Mac で npm i xxxx がエラーになっていた(説明ヘタかw)。

xxxx の最新バージョンが提供されればそちらに更新するのだけど、その見込みがなく、問題を局所的に回避したい場合は以下の方法で、依存関係を無理矢理上書きできる。

{
  "name": "my-awesome-apps",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {},
  "devDependencies": {
    "typeorm": "^0.3.17"
  },
  "overrides": {
    "oracledb": "6.5.1"
  }  
}

overrides 句で上書きしたいモジュール名とそのバージョンを記述しておくと、上記の例では oracledb は必ず 6.5.1 がインストールされる。

今回は、oracledb は使用しない(インストールエラーを回避したいだけだった)ので上記のような手法を取った。
多用は厳禁。

Discussion