🚄

$ npm init $ npm install パッケージ名 【新規Expressプロジェクト作成を例に】

2023/09/16に公開

Node.js製WebサーバーExpressの新規プロジェクト作成を例にして、npmの使い方をメモしておこうと思います。今回説明するのは以下です。

$ npm init
$ npm install パッケージ名
$ npm install パッケージ名@x.y.z
$ npm install -D パッケージ名

前提情報

$ npm -v
9.6.7

①ディレクトリ作成

空のディレクトリを適当に作成

②初期化

ターミナル
$ npm init

初期化には「最初の状態に戻す」という意味の他にも「使い始められるように、最初の状態を整える」という意味もあります。今回は後者です。(あとから修正できるので一旦全てreturn)
実行するとプロジェクト直下にpackage.jsonが生成されます。

package.json
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

package.jsonのあるプロジェクトのことをパッケージと呼びます。
パッケージとモジュールの違いについては以下に記載
https://zenn.dev/y__adler/articles/94f3f04c667a82

③install

以下は、install系コマンドを入力してからのフローイメージです
3パターン紹介します

最新バージョンをinstallする場合

ターミナル
$ npm install express
  1. 最新バージョンのパッケージがpackage.jsonのdependenciesに追記される
  2. node_modulesディレクトリが作成され、dependenciesに追記されたパッケージが格納される
  3. package-lock.jsonが作成される

指定したバージョンをinstallする場合

ターミナル
$ npm install express@x.y.z
  1. 指定したバージョンのパッケージがpackage.jsonのdependenciesに追記される
  2. node_modulesディレクトリが作成され、dependenciesに追記されたパッケージが格納される
  3. package-lock.jsonが作成される

開発時のみ必要なパッケージをinstallする場合

ターミナル
$ npm install -D eslint
  1. 最新バージョンのパッケージがpackage.jsonのdevDependenciesに追記される
  2. node_modulesディレクトリが作成され、devDependenciesに追記されたパッケージが格納される
  3. package-lock.jsonが作成される

補足

package-lock.json

  • package.jsonとの違いは、依存関係にあるパッケージも含めて全てのパッケージのバージョンと情報まで管理されている点です。
  • package.jsonのdependenciesとdevDependenciesを見ればわかるように、依存関係の解決のためにインストールされたパッケージ分までは厳密にバージョン管理されていないので、最新バージョンのものがインストールされてしまいます。

package-lock.jsonに関しては以下にも記載されています。
https://zenn.dev/y__adler/articles/4074e9dfb92f4b

参考

https://expressjs.com/ja/starter/installing.html
https://docs.npmjs.com/cli/v10/commands/npm-install

Discussion