npmでバージョンをnpm shrinkwrapで固定してさらにバージョンアップデートする方法

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

npmでバージョンをnpm shrinkwrapで固定してさらにバージョンアップデートする方法

npmで普通にインストールしたりすると”^3.1.0″みたいになりますよね。んで、開発が進んで期間がたつとパッケージのバージョンが上がっているので、バージョンアップするとアプリが動かない・・・なんてことがあったりします。リリース時にはパッケージのバージョンは固定したものを出したいですよね。さらに今回は後々の事も考えて固定したパッケージのバージョンをアップデートする方法もご紹介します。

Ads

はじめに

npmのバージョンによって若干の違いがあるので、今回はnpm v4とnpm v5でそれぞれ紹介します。

npm v4

$ npm -v
4.2.0

$ node -v
v7.9.0

下記のようなpackage.jsonがはじめにあったとしてこれをバージョンを固定して運用する方法をやってみます。
今回はjQueryとjQuery-uiで試してみます。

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "jquery": "3.1.0",
    "jquery-ui": "1.12.1"
  }
}

バージョンを固定してみる

まずはインストール

$ npm install

今インストールしたnodeモジュールのバージョンを固定したい場合はこれを叩きます。

$ npm shrinkwrap

これを叩くとnpm-shrinkwrap.jsonが作成されています。中身をみてみるとこんな感じ。

{
  "name": "test",
  "version": "1.0.0",
  "dependencies": {
    "jquery": {
      "version": "3.1.0",
      "from": "jquery@3.1.0",
      "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.1.0.tgz"
    },
    "jquery-ui": {
      "version": "1.12.1",
      "from": "jquery-ui@1.12.1",
      "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz"
    }
  }
}

ちなみに今回はpackage.jsonでのバージョンを固定する書き方になってしまっていますが、例えば

"jquery": "^3.1.0"

となっているとしたら、3.1.0以上の最新版がインストールされるはずなので、npm shrinkwrapするとその最新版で固定してくれます。

パッケージのバージョンをあげる場合

package.jsonのバージョンを書き換える

"jquery": "3.2.0"

npm-shrinkwrap.jsonが存在する場合、$ npm installしてもpackage.jsonを無視してnpm-shrinkwrap.jsonのバージョンが優先されてしまいますので、今回は

$ npm update

します。こうするとバージョンを上げたものがインストールされます。ちなみに、$ npm updateだとpackage.jsonのバージョンを書き換えたものが全てupdateされます。もし個別にupdateしたい場合は

$ npm update パッケージ名

ここまでやるとバージョンアップされます。ですが、npm-shrinkwrap.jsonは書き換えられていません、なので、バージョンを固定されていないんですね。

ちなみに、この状態で$ npm installするとnpm-shrinkwrap.jsonのバージョンが優先してインストールされるので元に戻せます。

もういちど$ npm shrinkwrapすればOKです。

npm v5

$ npm -v
5.0.3

$ node -v
v8.1.4

v5ではnpm-shrinkwrap.jsonは必要ありません。

$ npm install

すれば勝手にpackage-lock.jsonができます。中身はnpm-shrinkwrap.jsonとほとんど同じ。僕はあまりよくわからないんですけど、npm-shrinkwrap.jsonでは色々問題があるようで、package-lock.jsonが使えるv5の方がいいのかなと。しかも、v5の方が挙動が早いらしい。

正直体感ではあまりわからないけど・・

ちなみに、npm installとかnpm updateとかやる際の挙動はv4もv5も同じです。

注意

npm-shrinkwrap.jsonがある状態でnpmのバージョンをv5に上げてnpm installすると怒られます。v5の場合はnpm-shrinkwrap.jsonは消してからnpm installした方がよろしいかと。

参考

イチマルニデザインブログをフォローしよう

イチマルニデザインブログではTwitterアカウントでWebに関する情報をつぶやいています。フォローすることで最新情報をすぐに受け取ることができます

いいなと思ったらシェアお願いします

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

同じカテゴリーの記事

Ads
ページの先頭へ