やりたいこと
a@1.0.0 がb@2.0.0 に依存してて、さらにb@2.0.0が c@0.1.0に依存してるとして、aとbのバージョンは変えずにcのバージョンのみを変えたい!
cのそのバージョンが脆弱性です!という時に、調査してみました。
解決方法
npmのバージョン5.x系から、dedupeという機能がデフォルトで入っています。
https://docs.npmjs.com/cli/dedupe
npmで複数のパッケージを管理していると、バージョン違いの同じOSSが重複してきたりします。
そんな時に、semverで後方互換性を保っているなら、一番高いバージョンを参照する様にする、という機能です。
ちなみに、semverはセマンティックバージョニングといい、バージョニングのルールを設けたものです。
これによると、MAJOR.MINOR.PATCH を上げるには、
- MAJOR : APIの変更に互換性のない場合
- MINOR : 後方互換性があり機能性を追加した場合
- PATCH : 後方互換性を伴うバグ修正をした場合
となっています。
npmのモジュールはこのルールに沿ったものであるべき、ということでしょう。
では、dedupeの機能で重複が解消された部分です。
終わりに
そもそもyarn使ったら重複はしないのでそっちの方が幸せになれる気はするのですが、チームで開発していたり、IDE使ってたり、PaaS環境に実行させたりと、環境によってはまだまだyarnは普及してはいないので、npmを使って解決できる方法を探してみました。
0コメント