Package.jsonファイルの構造
ここ数年、JavaScriptやNode.jsプロジェクトに取り組んでいる場合は、プロジェクトとモジュール用のnpmの構成ファイルであるpackage.json
ファイルに出くわしたことでしょう。 この投稿では、典型的なpackage.jsonファイルにある最も重要なキーと値のいくつかを探ります。
プロジェクトの開始
npmパッケージマネージャーを使用してプロジェクトを開始する最も簡単で最速の方法は、init
コマンドと-y
フラグを使用することです。このフラグは、すべての質問にはいと答えます。
$ npm init -y
プロジェクトの名前は、現在のフォルダーの名前と同じになります。
init
コマンドは、次のようなJSONコンテンツを含むpackage.json
ファイルを現在のディレクトリに書き込みます。
{ "name": "hello-alligator", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }
最初のpackage.jsonファイルの各キーを調べてみましょう。
- name :プロジェクトの名前。すべて小文字でURLセーフである必要があります。 名前の前にスコープ(例: @ angle / angle-cli )を付けることができ、プロジェクトが非公開の場合はオプションですが、プロジェクトを公開する場合は名前が必須であり、一意である必要がありますnpmリポジトリにあります。
- version :node-semverが理解できるバージョン番号。 これは、プライベートモジュールではオプションであり、パブリックモジュールでは必須であり、非常に重要です。
- description :プロジェクトの説明。 これはオプションであり、プロジェクトをリポジトリで簡単に見つけることができる場合に役立ちます。
- main :プロジェクトのエントリファイル。
- scripts :
scripts
キーは、スクリプト名をキーとして、コマンドを値として持つオブジェクトを想定しています。 これは、コマンドラインから直接実行でき、ローカルサーバーでプロジェクトを開始したり、本番用にビルドしたり、テストを実行したりするなど、あらゆる種類のスクリプトを指定する場合に便利です。scripts
は、一般的なpackage.jsonファイルで最も手動で変更を加える場所である可能性があります。 - keywords :npmリポジトリでモジュールを見つけるのに役立つキーワードの配列。
- author :作成者フィールドには、
name
、email
、およびurl
のキーを持つオブジェクトが必要です。 これにより、人々はプロジェクトの所有者と簡単に連絡を取ることができます。 - license :SPDX識別子を使用したライセンス名が必要です。 デフォルトはISCライセンスであり、
MIT
も人気のあるライセンスの選択肢です。UNLICENSED
は、プライベートでクローズドソースのプロジェクトにも使用できます。
依存関係の管理
npmの主な強みは、プロジェクトの依存関係を簡単に管理できることです。 したがって、プロジェクトのpackage.jsonファイルが主にプロジェクトの依存関係の指定に集中しているのは当然のことです。 通常の依存関係がありますが、 devDependencies 、 peerDependencies 、 optionalDependencies 、およびbundledDependenciesもあります。 それらを調べてみましょう:
- 依存関係:通常のプロジェクト依存関係。 これは、依存関係の大部分が存在する可能性が最も高い場所です。
$ npm install my-dependency
を使用して、このような依存関係をプロジェクトに追加します。 - devDependencies :プロジェクトで作業しているときにのみ役立つ依存関係。 たとえば、テストライブラリとトランスパイラーはほとんどの場合devDependenciesとして追加する必要があります。 installコマンドでnpmの
--save-dev
フラグを使用してdevDependencyを追加します。 - optionalDependencies :npmによってオプションとして扱われるべき依存関係。 つまり、オプションの依存関係を満たせない場合でも、npmが文句を言ったり、インストールに失敗したりすることはありません。 インストールコマンドで
--save-optional
を使用して、オプションの依存関係をインストールします。 - bundledDependencies :プロジェクトにバンドルされるパッケージ名の配列が必要です。 バンドルされた依存関係のリストにも依存関係を追加するには、installコマンドで
--save-bundle
フラグを使用します。 - peerDependencies :ピア依存関係は、プロジェクトが依存するモジュールを指定するのに役立ちます。 このように、一部のピア依存関係が欠落している場合、npmは警告を発行します。
おそらく前に見たように、依存関係はさまざまな形式を受け入れて、依存関係に使用できるバージョンまたはバージョンの範囲を指定できます。 例えば:
- 2.4.2:正確にバージョン2.4.2
- ^ 2.4.2:バージョン2.4.2と互換性のある最新バージョン
- 〜2.4.2:2.4.2、2.4.3、2.4.4、…などのバージョンで動作します
- 〜2.4:これは2.4、2.5、2.6などのバージョンで機能します…
- 2.4.x:パッケージの2.4バージョンの任意のパッチバージョンで動作します
- 2.x:パッケージの2バージョンのマイナーバージョンで動作します
- > = 2.4:2.4以上のバージョン。 <、<=または>を使用することもできます
- 2.4.2 3.1.1:バージョン2.4.2とバージョン3.1.1の間のすべてのバージョン
各範囲を||
で区切ることにより、複数の可能なバージョン範囲を指定することもできます。
より便利な構成キー
オプションでプロジェクトのpackage.jsonファイルに入れることができる構成は他にもあるので、最も便利な構成のいくつかに簡単に触れてみましょう。
- browser :サーバーではなくブラウザーで使用することを目的としたプロジェクトには、
main
の代わりにブラウザーキーを使用します。 - private :このキーが
true
に設定されている場合、プロジェクトをnpmリポジトリに公開することはできません。 これは、プロジェクトを誤って世界に公開するのを防ぎたい場合に役立ちます。 - engines :
engines
を使用して、プロジェクトが動作するNode.jsやnpmの特定のバージョンを指定します。node
および/またはnpm
のキーと、バージョンの範囲を指定する依存関係の値のように見える値を持つオブジェクトを受け取ります。 - ホームページ:プロジェクトのホームページのURL。
- bugs :問題とバグを報告できるURL。 これは多くの場合、プロジェクトのGithub問題ページへのURLになります。
- files :このオプションのキーは、プロジェクトに別のプロジェクトへの依存関係が追加されたときに含まれるファイルの配列を想定しています。 ファイル名/パスはグロブパターンを使用でき、
files
キーが指定されていない場合、デフォルト値の["*"]
が使用されます。これは、すべてのファイルが含まれることを意味します。 ただし、.git
やnome_modules
などの特定のファイル/フォルダーは常に無視されます。
これにより、package.json構成に何を入れることができるかについてのかなり良い一般的なアイデアが得られるはずです。 可能なすべての構成キーの詳細については、公式ドキュメントを参照することもできます。