🐥
npm モジュールの依存関係を無理矢理上書きする
npm i xxxx
でインストールするモジュールの依存関係の奥の方のモジュールでインストール時にエラーが発生してモジュール xxxx がインストールできない事案が発生。
具体的には、その奥の方のモジュールとは oracledb で、過去のバージョンでは M1 など ARMアーキテクチャの CPU を搭載した Mac ではインストール時にエラーが発生していた。
これを孫として、その親(つまり 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