パッケージのインストールでは、特定ディレクトリ以下にインストールするローカルと、 複数のプロジェクトなどから使用できるように共用ディレクトリ(CentOS 7の場合 /usr/lib/node_modules/)に インストールするグローバルがあります。

package.json

パッケージのインストールを実行するディレクトリに、JSON形式のpackage.jsonファイルがあると、インストール時に指定したパッケージ情報 を追加してくれます。 または、インストールしたいパッケージをpackage.jsonで設定することも可能です。

package.jsonファイルは、npm init コマンドで作成することができます。 その場合、パッケージ名やバージョンなどの入力を要求されますので、適当に入力します。

npm init

簡単なテストを行うような場合は、以下のようなpackage.jsonファイルを手動作成するか、package.jsonファイル無しで行う方法があります。

{}
注意 package.jsonファイルの中身が空の場合、npm install コマンドを実行するとエラーになります。

インストールのオプション

インストールのオプションは、--save-prod 、--save-dev、--save-optional や --no-save などがあります。 オプションの詳細については、以下のドキュメントに書かれています。

どのオプションを使ったら良いか分からない場合は、オプション無しでインストールするのが良いでしょう。

オプション無し(ローカル)

オプション無しの場合、パッケージはローカルにインストールされ、package.jsのdependenciesにパッケージが追加されます。

npm install [パッケージ名]

$ npm install mocah
package.jsonは、以下のようになっています。
{
  "dependencies": {
    "mocha": "^7.1.2"
  }
}
package-lock.jsonは、以下のようになっていています。
{
  "requires": true,
  "lockfileVersion": 1,
  "dependencies": {
    "ansi-colors": {
      "version": "3.2.3",
      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
      "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw=="
    },
  ・・・
}

--save-dev(ローカル)

オプション--save-dev、または -D の場合、パッケージはローカルにインストールされ、 package.js の devDependencies に追加されます。 これは開発目的(例 ユニットテスト)に必要なパッケージをインストールする場合に指定するようです。

npm install --save-dev [パッケージ名]

$ npm install --save-dev mocah
package.jsonは、以下のようになっています。
{
  "devDependencies": {
    "mocha": "^7.1.2"
  }
}
package-lock.jsonは、以下のようになっていて、各パッケージの項目に dev: true が追加されています。
{
  "requires": true,
  "lockfileVersion": 1,
  "dependencies": {
    "ansi-colors": {
      "version": "3.2.3",
      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
      "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
      "dev": true
    },

  ・・・
}

-g(グローバル)

グローバルにインストールする場合は、オプション-gを付けて実行します。

npm install -g [パッケージ名]

CentOS 7 の場合、/usr/lib/node_modules/以下にインストールされているようです。

$ ls -l /usr/lib/node_modules/
total 4
drwxr-xr-x. 10 root root 4096 Dec 12 12:13 npm

/usr/lib/node_modules/npm/ は以下のようになっていて、 グローバルでインストール済みのパッケージ名のディレクトリがあります。

$ ls -l /usr/lib/node_modules/npm
total 244
-rw-r--r--.   1 root root    959 Oct 10  2019 appveyor.yml
-rw-r--r--.   1 root root  25263 Nov 19 08:05 AUTHORS
drwxr-xr-x.   3 root root    114 Dec 12 12:13 bin
-rw-r--r--.   1 root root 131669 Nov 19 08:05 CHANGELOG.md
drwxr-xr-x.   2 root root    116 Dec 12 12:13 changelogs
-rwxr-xr-x.   1 root root    529 Oct 10  2019 configure
-rw-r--r--.   1 root root   4484 Oct 10  2019 CONTRIBUTING.md
drwxr-xr-x.   6 root root     54 Dec 12 12:13 doc
drwxr-xr-x.   4 root root    108 Dec 12 12:13 html
drwxr-xr-x.   8 root root   4096 Dec 12 12:13 lib
-rw-r--r--.   1 root root   9742 Oct 10  2019 LICENSE
-rw-r--r--.   1 root root    156 Oct 10  2019 make.bat
-rw-r--r--.   1 root root   5612 Nov 19 08:05 Makefile
drwxr-xr-x.   5 root root     42 Dec 12 12:13 man
drwxr-xr-x. 369 root root  12288 Dec 12 12:13 node_modules
-rw-r--r--.   1 root root   7955 Nov 19 08:05 package.json
-rw-r--r--.   1 root root   4705 Nov 19 08:05 README.md
drwxr-xr-x.   2 root root   4096 Dec 12 12:13 scripts
[vagrant@local t]$ ls -l /usr/lib/node_modules

/usr/lib/node_modules/npm/node_modules/ は以下のようになっていて、 グローバルのインストール済みパッケージ名のディレクトリがあります。

$ ls -l /usr/lib/node_modules/npm/node_modules/
total 12
drwxr-xr-x. 2 root root   75 Dec 12 12:13 abbrev
drwxr-xr-x. 2 root root  135 Dec 12 12:13 agent-base
・・・
・・・
drwxr-xr-x. 5 root root  181 Dec 12 12:13 yargs
drwxr-xr-x. 3 root root  109 Dec 12 12:13 yargs-parser