JavaScript
npm
package.json

【いまさらですが】package.jsonのversion指定

More than 1 year has passed since last update.

package.jsonのdependenciesdevDependenciesに依存するパッケージを指定することができます。
いまさらですが、そのパッケージのversionの指定方法についてまとめます。

version

指定したversionと正確に一致するバージョンがインストールされます。

{
  "dependencies": {
    "foo": "1.0.0"
  }
}

上記の場合は、1.0.0のバージョンがインストールされます。

>version

指定したversionより大きいバージョンがインストールされます。

{
  "dependencies": {
    "foo": ">1.0.0"
  }
}

上記の場合は、1.0.0より大きいバージョンがインストールされます。
また、<>=<=の比較演算子を使用した場合も、その比較演算子が持つ意味通りのバージョンがインストールされます。

version1 - version2

範囲指定を行なうことができます。
version1 - version2と表記すると、>=version1 <=version2と同じ意味となります。

{
  "dependencies": {
    "foo": "1.0.1 - 1.2.0"
  }
}

上記の場合は、1.1.0以上、1.2.0以下のバージョンがインストールされます。

X, *

X(もしくはx)や*をワイルドカードとして使うことができます。

{
  "dependencies": {
    "foo": "*",     // どんなバージョンでもOK
    "bar": "1.1.x", // >=1.1.0 and <1.2.0 
    "hoge": "1.X",  // >=1.0.0 and <2.0.0
    "huga": ""      // "*"と同じことになる = どんなバージョンでもOK
  }
}

4番目のhugaパッケージのように、バージョンを何も指定しないと、"*"の場合と同じ意味となります。

~version

Tilde(チルダ)記号を用いたときです。
versionのうち、minorバージョンが明記されている場合はpatchバージョン部分の更新ができ、そうでない場合はminorバージョンの更新がされます。
(バージョンの構成は major.minor.patch となっています。)

{
  "dependencies": {
    "foo": "~1.1.1",  // >=1.1.1 and <1.2.0
    "bar": "~1.1",    // >=1.1.0 and <1.2.0
    "hoge": "~1"      // >=1.1.0 and <2.0.0
  }
}

^version

Caret(キャレット)記号を用いたときです。
major.minor.patchのうち、一番左の0以外の数字のバージョンを更新しないような、更新が可能です。

{
  "dependencies": {
    "foo": "^1.1.1",  // >=1.1.1 and <2.0.0
    "bar": "^0.1.1",    // >=0.1.1 and <0.2.0
    "hoge": "^0.0.1"      // >=0.0.1 and <0.0.2
  }
}

公式サイト