npm パッケージ インストール フラグの違い
「--save」と「--save-dev」の違い:Node.js、npm、saveに関する解説
日本語
「--save」と「--save-dev」は、Node.jsのプロジェクトで使用するパッケージをインストールする際に、npm(Node Package Manager)で使用されるフラグです。両者の違いは、インストールされたパッケージの用途によって異なります。
--save
- 例えば、ExpressやReactなどのフレームワークやライブラリはこのフラグを使ってインストールされます。
- これらのパッケージは、プロジェクトの実行やビルドに必要であり、プロジェクトの配布時に一緒に含まれます。
- プロジェクトの依存関係としてインストールされるパッケージに使用されます。
--save-dev
- 例えば、ESLintやJestなどのリンターやテストフレームワークはこのフラグを使ってインストールされます。
- これらのパッケージは、プロジェクトの開発やテストプロセスを支援しますが、プロジェクトの最終的な配布物には含まれません。
- 開発環境でのみ必要となるパッケージに使用されます。
- 「--save-dev」は開発環境でのみ必要なパッケージをインストールし、プロジェクトの配布時には含まれません。
- 「--save」はプロジェクトの依存関係をインストールし、プロジェクトの配布時に含まれます。
例
npm install eslint --save-dev
:ESLintを開発環境でのみ必要なパッケージとしてインストールします。npm install express --save
:Expressをプロジェクトの依存関係としてインストールします。
npm install
コマンドを実行する際に、特に指定しない場合は、通常「--save」がデフォルトで使用されます。- npmのバージョンによっては、デフォルトの動作が異なる場合があります。
npm の --save と --save-dev の違いと、具体的なコード例
Node.js のプロジェクトでパッケージをインストールする際、npm install
コマンドに --save
や --save-dev
といったフラグを付けることで、インストールするパッケージの情報を package.json
ファイルに記録できます。このフラグによって、パッケージのインストール先や、プロジェクトの依存関係の管理方法が異なります。
--save と --save-dev の違い
- インストールしたパッケージを
package.json
ファイルのdevDependencies
オブジェクトに登録します。 - 開発環境でのみ必要となるパッケージで、プロジェクトのテスト、ビルド、デバッグなどの作業を支援するツールに使用します。
- 例えば、Jest、Mocha などのテストフレームワーク、ESLint などのリンター、webpack などのビルドツールなどが該当します。
- インストールしたパッケージを
- プロジェクトの実行に必須なパッケージで、プロジェクトを配布する際にも一緒に配布されるべきパッケージに使用します。
- 例えば、Express.js や React といったフレームワークや、プロジェクトのロジックに直接関わるライブラリなどが該当します。
具体的なコード例
--save の例
npm install express --save
このコマンドを実行すると、Express.js がプロジェクトの依存関係としてインストールされ、package.json
ファイルの dependencies
オブジェクトに以下のように追記されます。
{
"dependencies": {
"express": "^4.18.2"
}
}
npm install eslint --save-dev
{
"devDependencies": {
"eslint": "^8.33.0"
}
}
- --save-dev は、開発環境でのみ必要となるパッケージをインストールし、
devDependencies
に登録します。 - --save は、プロジェクトの実行に必須なパッケージをインストールし、
dependencies
に登録します。
なぜ使い分けるのか?
- npm install の最適化
npm install
コマンドを実行する際に、--production
オプションを指定すると、devDependencies
に登録されたパッケージはインストールされません。これにより、プロジェクトのビルド時間を短縮できます。 - 依存関係の管理
dependencies
とdevDependencies
を分けることで、プロジェクトの依存関係を明確にし、不要なパッケージが配布されるのを防ぎます。 - プロジェクトの配布
dependencies
に登録されたパッケージは、プロジェクトを他の環境に配布する際に一緒に配布されます。一方、devDependencies
に登録されたパッケージは、配布されません。
さらに詳しく知りたい方へ
- package.json の構造
package.json
ファイルの構造や、各プロパティの意味についても、npm のドキュメントや、Node.js のドキュメントを参照してください。
npm の代替方法
yarn
- 使い方
npm とほぼ同じように使用できます。yarn add
コマンドでパッケージをインストールし、--dev
オプションを指定することでdevDependencies
に登録できます。 - インストール方法
npm install -g yarn
- 特徴
npm と同様に Node.js パッケージマネージャーですが、より高速で信頼性が高いとされています。
pnpm
- 特徴
ディスク容量の節約に優れており、高速なインストールが可能です。ハードリンクやシンボリックリンクを駆使して、重複する依存関係を共有します。
bun
- インストール方法
curl -fsSL https://bun.sh/install | bash
- 特徴
JavaScript/TypeScript ランタイムであり、パッケージマネージャーも内蔵しています。非常に高速なインストールとビルドが可能です。
- --save-optional
パッケージがなくても動作する、オプションの依存関係として登録します。 - --save-exact
パッケージのバージョンを厳密に指定します。 - --no-save
package.json
ファイルに何も追加しません。 - -g (グローバルインストール)
パッケージをグローバルにインストールします。これにより、どのディレクトリからでもそのパッケージを使用できます。
npm の --save
と --save-dev
は、パッケージのインストール先を指定する上で基本的なオプションですが、他にも様々な方法やツールが存在します。
- pnpm
ディスク容量の節約に優れており、高速なインストールが可能です。 - yarn
npm と互換性が高く、より高速なインストールが可能です。
これらのツールは、プロジェクトの規模や要件に応じて使い分けることで、より効率的な開発が可能になります。
どのツールを選ぶべきか?
- プロジェクトの要件
ディスク容量が限られている場合は pnpm が適しています。高速なビルドが必要な場合は bun が適しています。 - チームの慣習
チーム内で既に使用しているツールがある場合は、それに合わせる方が良いでしょう。 - プロジェクトの規模
小規模なプロジェクトであれば npm で十分ですが、大規模なプロジェクトでは yarn や pnpm の方が高速で安定している場合があります。
最後に
npm のパッケージ管理は、Node.js の開発において非常に重要な要素です。この記事で紹介した様々な方法やツールを理解し、自分のプロジェクトに最適な方法を選択してください。
node.js npm save