package.json の構成

多くの npm パッケージを使用して Node.js アプリを開発している場合は、1 つまたは複数のパッケージが更新されている場合に、プロジェクトをビルドすると、警告やエラーが発生することは珍しくありません。 ときには、バージョンが競合する結果になったり、パッケージのバージョンが廃止されていたりする場合もあります。 ここでは、package.json ファイルを構成し、警告またはエラーが表示された場合に起きていることを理解するのに役立つ簡単なヒントをいくつか示します。 これは package.json の完全なガイドではなく、npm パッケージのバージョン管理にのみ焦点を当てています。

npm パッケージのバージョン管理システムには、厳密な規則があります。 バージョンの形式は次に従っています。

[major].[minor].[patch]

たとえば、アプリ内に 5.2.1 のバージョンのパッケージがあるとします。 メジャー バージョンは 5、マイナー バージョンは 2、修正プログラムは 1 です。

  • メジャー バージョンの更新では、パッケージには旧バージョンとの下位互換性のない新機能、すなわち互換性に影響する変更点が含まれています。
  • マイナー バージョンの更新では、前のパッケージ バージョンと下位互換性のある機能がパッケージに追加されています。
  • 修正プログラムには、1 つまたは複数のバグ修正が含まれます。 バグ修正には、常に下位互換性があります。

注目すべき点は、npm パッケージの一部の機能には、依存関係があることです。 たとえば、webpack で TypeScript コンパイラ パッケージの新機能 (ts-loader) を使用するには、webpack の npm パッケージと webpack-cli パッケージの更新も必要になる可能性があります。

パッケージのバージョン管理を支援するため、npm では package.json で使用できる複数の表記をサポートしています。 これらの表記を使用して、アプリでそのまま使用されるパッケージの更新の種類を制御することができます。

たとえば、React を使用していて、reactreact dom npm パッケージを含める必要があるとします。 package.json ファイルでは、複数の方法でこれを指定することができます。 たとえば、次のように、パッケージの正確なバージョンの使用を指定できます。

"dependencies": {
  "react": "16.4.2",
  "react-dom": "16.4.2",
},

上記の表記を使用すると、npm では常に指定した正確なバージョン 16.4.2 が取得されます。

特殊な表記を使用して、更新を修正プログラムの更新 (バグの修正) に制限することができます。 次の点に注意してください。

"dependencies": {
  "react": "~16.4.2",
  "react-dom": "~16.4.2",
},

チルダ (~) 文字を使用して、パッケージが修正プログラムの場合にのみ更新することを npm に指示します。 これにより、npm は react 16.4.2 を 16.4.3 (または 16.4.4 など) に更新することはできますが、メジャー バージョンまたはマイナー バージョンへの更新は受け入れません。 そのため、16.4.2 が 16.5.0 に更新されることはありません。

また、キャレット (^) 記号を使用して、npm がマイナー バージョン番号を更新できることを指定することもできます。

"dependencies": {
  "react": "^16.4.2",
  "react-dom": "^16.4.2",
},

この表記を使用すると、npm により react 16.4.2 が 16.5.0 (または 16.5.1、16.6.0 など) に更新されますが、メジャー バージョンへの更新は受け入れられません。 そのため、16.4.2 が 17.0.0 に更新されることはありません。

npm によりパッケージが更新されるときに、package-lock.json ファイルが生成されます。このファイルには、アプリで使用されている実際の npm パッケージ (入れ子になったすべてのパッケージを含む) のバージョンが一覧表示されます。 package.json によりアプリの直接的な依存関係が制御されますが、入れ子になった依存関係 (特定の npm パッケージに必要なその他の npm パッケージ) は制御されません。 他の開発者やテスト担当者が自分が使用しているのと同じパッケージ (入れ子になったパッケージを含む) を使用していることを確認する必要がある場合は、開発サイクルで package-lock.json ファイルを使用することができます。 詳細については、npm ドキュメントの「package-lock.json」を参照してください。

Visual Studio の場合、package-lock.json ファイルはプロジェクトには追加されませんが、プロジェクト フォルダーで見つけることができます。