package.json の dependencies と devDependencies の違い

2024-04-02

Node.js と npm で devDependencies がインストールされない問題

Node.js プロジェクトで npm install を実行しても devDependencies がインストールされない場合があり、開発環境で必要な依存関係が不足して問題が発生する可能性があります。

原因

npm install はデフォルトで dependencies に記載されているパッケージのみをインストールします。devDependencies は開発環境でのみ使用されるパッケージを指定するため、別途インストールする必要があります。

解決策

devDependencies をインストールするには以下の方法があります。

--dev オプションを使用する

npm install --dev

このコマンドは dependenciesdevDependencies 両方のパッケージをインストールします。

npm install --only=dev

package.json ファイルの dependencies セクションに devDependencies を移動します。

npm-run-all のようなツールを使用して、devDependencies をインストールするスクリプトを作成できます。

補足

  • 上記の方法以外にも、環境設定ファイルや Yarn などのツールを使用して devDependencies をインストールすることもできます。
  • devDependencies は開発環境でのみ使用されるため、本番環境にデプロイする際には不要です。

注意

  • npm install --only=dev を使用すると、dependencies に記載されているパッケージはインストールされません。

用語解説

  • Node.js: JavaScript をサーバーサイドで実行するためのプラットフォーム
  • npm: Node.js 用のパッケージ管理ツール
  • dependencies: アプリケーション実行時に必要なパッケージ
  • devDependencies: 開発環境でのみ使用されるパッケージ



// package.json

{
  "name": "my-project",
  "version": "1.0.0",
  "description": "My project",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "mocha test"
  },
  "keywords": ["node", "javascript"],
  "author": "Your Name",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "mocha": "^8.4.0",
    "chai": "^4.3.4"
  }
}

// index.js

const express = require('express');

const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('Example app listening on port 3000!');
});

// test/test.js

const assert = require('chai').assert;

describe('My Test', () => {
  it('should return Hello World!', () => {
    const res = {
      send: (text) => {
        assert.equal(text, 'Hello World!');
      }
    };

    app.get('/', (req, res) => {
      res.send('Hello World!');
    });

    app.get('/', (req, res) => {
      res.send('Hello World!');
    });
  });
});

上記コードを実行するには、以下のコマンドを実行します。

npm install

実行結果

$ npm install

> [email protected] install /Users/your-name/my-project

> node-pre-gyp install --fallback-to-build

> node-pre-gyp WARN Using request for HTTP requests (Sync https://github.com/request/request/issues/3142)

> node-pre-gyp WARN Pre-built binaries not found for [email protected] and [email protected] (node-v16.14.0-linux-x64) on npm WARN This is probably not a problem with npm itself, and is likely due to the package author not publishing pre-built binaries.

> node-pre-gyp WARN If you're the package author and would like to publish pre-built binaries, please refer to https://github.com/node-pre-gyp/node-pre-gyp#readme

> node-pre-gyp WARN To view the stack trace of this warning, add `--loglevel=verbose` to your command.

> [email protected] installed as a devDependency

+ [email protected]

added 17 packages from 14 contributors, updated 1 package and audited 17 packages in 10.21s

found 0 vulnerabilities (0 low, 0 moderate, 0 high)

1 package is looking for funding
  run `npm fund` for details

npm list --dev

このコマンドを実行すると、devDependencies に記載されているパッケージの一覧が表示されます。

$ npm list --dev

├─┬ [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ └── [email protected]
├── [email protected]
│ ├── @mocha/[email protected]
│ ├── @mocha/[email protected]
│ ├── @mocha/[email protected]
│ ├── @mocha/[email protected]
│ ├── @mocha/[email protected]
│ ├── @mocha/[email protected]
│ ├── @mocha/[email protected]
│ ├── [email protected]
│ ├── [email protected]



npm install 以外で devDependencies をインストールする方法

npm install --only=dev

Yarn を使用する

Yarn は npm と同様のパッケージ管理ツールですが、devDependencies を自動的にインストールする機能があります。

--only=dev オプションは、devDependencies のみをインストールするオプションです。このオプションを使用すると、dependencies に記載されているパッケージはインストールされません。

  • package.json を編集する

package.json ファイルの dependencies セクションに devDependencies を移動すると、npm install を実行するたびに devDependencies が自動的にインストールされます。

  • npm-run-all を使用する

Yarn は npm と同様のパッケージ管理ツールですが、devDependencies を自動的にインストールする機能があります。Yarn を使用してプロジェクトを初期化する場合は、devDependencies を別途インストールする必要はありません。

// package.json

{
  "name": "my-project",
  "version": "1.0.0",
  "description": "My project",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "mocha test",
    "dev": "npm-run-all --parallel lint test"
  },
  "keywords": ["node", "javascript"],
  "author": "Your Name",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "mocha": "^8.4.0",
    "chai": "^4.3.4",
    "eslint": "^8.12.0"
  }
}

上記コードの場合、npm run dev コマンドを実行すると、eslint によるコードチェックと mocha によるテストが同時に実行されます。

yarn install

npm install --dev オプション以外にも、devDependencies をインストールする方法はいくつかあります。それぞれの方法の特徴を理解して、プロジェクトに合った方法を選択してください。


node.js npm


EJS、Handlebars、Pug:Node.jsで人気テンプレートエンジン徹底比較

テンプレートエンジンを使用すると、以下の利点があります。開発効率の向上: テンプレートを使用することで、HTML コードを毎回手書きする必要がなくなり、開発時間を短縮できます。コードの保守性向上: テンプレートとロジックを分離することで、コードが読みやすくなり、保守しやすくなります。...


【保存版】Node.js Expressでホスト名の取得方法:サンプルコード付き

ここでは、Node. js Express で現在のリクエストのホスト名を取得する2つの方法をご紹介します。方法 1: req. hostname プロパティを使用する最も簡単な方法は、req. hostname プロパティを使用することです。これは、Express によって提供される Request オブジェクトのプロパティであり、現在のリクエストのホスト名を取得します。...


【超解説】Node.js モジュールテスト:モック、改造、デバッガ、カバレッジ…を使いこなせ!

しかし、テストコードにおいては、モジュールの内部動作を理解し、非公開関数を含むすべてのコードを検証することが重要です。そこで、この記事では、Node. js モジュールの内部関数にアクセスしてテストする方法をいくつか紹介します。最も簡単な方法は、モジュールオブジェクトのプロパティを直接操作することです。モジュールをロードすると、そのモジュールオブジェクトが require 関数によって返されます。このオブジェクトには、公開関数だけでなく、非公開関数を含むモジュールのすべてのプロパティとメソッドにアクセスすることができます。...


Windows環境でNode.jsを使用時に発生するエラー "ENOENT, stat 'C:\Users\RT\AppData\Roaming\npm'" の解説

このエラーは、Windows環境でNode. jsを使用時に発生するエラーです。エラーメッセージは、npm コマンドを実行しようとすると表示されます。原因このエラーは、次のいずれかの原因で発生します。npm がインストールされていないnpm のキャッシュに問題がある...


SQL SQL SQL SQL Amazon で見る



JavaScript、Node.js、locationにおける npm install packages の場所

npm install コマンドを使用して Node. js パッケージをインストールすると、ローカル または グローバル のいずれかにインストールされます。ローカルインストールパッケージは現在の作業ディレクトリにある node_modules サブフォルダーにインストールされます。


Snapcraftを使ってNode.jsアプリケーションを簡単に配布する方法

NVM (Node Version Manager) は、複数のNode. jsバージョンを簡単に管理できるツールです。NVMを使用すれば、特定のプロジェクトに必要なNode. jsバージョンを個別にインストールできます。NVMのインストール


npm-shrinkwrap を使って Node.js プロジェクトのモジュールバージョンを固定する方法

npm install コマンドに --production フラグを指定すると、devDependencies はインストールされません。NODE_ENV 環境変数を "production" に設定すると、npm install コマンドは devDependencies を無視します。


Node.js開発でハマりがちなnpmパッケージのバージョン問題を解決する方法

方法1: npm list コマンドを使うnpm list コマンドは、インストールされているすべてのパッケージとそのバージョンの一覧を表示します。npm version コマンドは、指定されたパッケージのバージョンを表示します。方法3: package


npm スクリプト:process.argv プロパティ、-- オプション、環境変数、その他の方法

このチュートリアルでは、npm スクリプトにコマンドライン引数を渡す 2 つの方法について説明します。Node. js では、process. argv プロパティを使用して、コマンドライン引数にアクセスできます。これは文字列の配列であり、最初の要素は実行される Node


Node.jsでnpmモジュールをアンインストールする方法

npm uninstallコマンドを使うこれは、最も簡単で一般的な方法です。以下のコマンドを実行します。例:このコマンドを実行すると、指定されたモジュールとその依存関係がアンインストールされます。npm pruneコマンドは、使用されていないモジュールをアンインストールします。以下のコマンドを実行します。


package.json を使って特定のバージョンの NPM パッケージをインストールする

NPM パッケージをインストールする際に、パッケージ名の後に @ 記号とバージョン番号を指定することで、特定のバージョンのパッケージをインストールできます。例:このコマンドは、Express パッケージのバージョン 4.17. 1 をインストールします。


npm install の --save オプションを使いこなして、プロジェクトを効率的に管理しよう!

npm install コマンドでパッケージをインストールする際、--save オプションを指定すると、インストールされたパッケージが package. json ファイルの dependencies プロパティに自動的に追加されます。メリット


npm ci コマンドと yarn を活用した package-lock.json ファイルの管理

このファイルはコミットすべきかどうか、開発者にとってよくある疑問です。一般的には、package-lock. json ファイルをコミットすることを 推奨 します。理由:環境の一貫性: package-lock. json ファイルは、すべての開発者が同じバージョンのパッケージをインストールし、同じ環境で作業できるようにします。