l08084のブログ

技術記事の執筆は、祈りに近い

npmパッケージのバージョンを固定する

npmパッケージのバージョンを固定して、動作に変化がないようにしたい。

バージョン情報

  • Node: 8.1.4

  • npm: 5.6.0

  • macOS High Sierra: 10.13.4

バージョン固定の手順

npmのver5以降からpackage-lock.jsonが導入されたため、下記の手順でバージョンのロックができる

  1. package.jsonのバージョン指定をパッチバージョンまで記述(5.0.x)。互換記号(~,^など)は消す

  2. package-lock.jsonを一度削除し、$ npm install

  3. package.jsonから呼び出している子のpackageはlock.json側で管理される

初めからキャレット^記号がつかないようにしたい

package.jsonのバージョン指定にキャレット^記号がつくと、範囲指定になるためバージョンが固定されない。そもそも初めからキャレットがつかないようにしたい。

$ npm config set save-exact true

👆のコマンドを実行することにより、npmの設定を変更して、npm install時にキャレット^が付かないようにすることができる。

また、npmの設定は~/.npmrcに保存されているので、.npmrcファイルをプロジェクト直下に配置することによって、プロジェクト単位でnpm install時のキャレットを無効にすることができる

.npmrc:

save-exact=true

参考サイト

package.jsonのパッケージバージョンに記載される ^ (キャレット) とは?どうしてつくのか? - dackdive's blog

パッケージマネージャがパッケージをインストールする仕組み – ymyzk’s blog