0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

npm install --saveについてきちんと調べる

Posted at

導入

初歩的だが「npm installnpm install --saveとは何が違うんだ?」と疑問に思ったので動作をきちんと調べた。

環境

$ zsh --version
zsh 5.9 (x86_64-apple-darwin23.0)
$ node -v
v20.16.0
$ npm -v
10.8.1

調査

まずは公式のリファレンスをきちんと読む。

Configurationのsaveでは以下のように説明されている。

  • Default: true unless when using npm update where it defaults to false
  • Type: Boolean
    Save installed packages to a package.json file as dependencies.
    When used with the npm rm command, removes the dependency from package.json.
    Will also prevent writing to package-lock.json if set to false.

リファレンスを読む限り、デフォルトで--save=trueなので

$ npm install {package}

$ npm install --save {package}

$ npm install --save=true {package}

は同じようだ。--save=trueのときはpackage.jsonに依存性パッケージとしてインストールされるとも書かれている。--save=falseを指定したときはpackage.jsonに依存性パッケージとしてインストールされない。このあたりは次節で実際に動作させてどのような意味なのか確認しよう。
また--save=falseのときはpackage-lock.jsonには書き込まれないともある。この点も実際に動作させて確認する。

動作確認

適当なフォルダを用意する。今回はnode-npm-install-testとした。

$ mkdir node-npm-install-test

このフォルダ内にsaxパッケージをインストールしたりアンインストールしたりして動作確認をする。

saxパッケージを選んだ理由はとくにない。公式のnpm-installのページで例に挙げられていたのでここでも使用した。

npm installnpm install --savenpm install --save=true

最初に下記を実行する。

$ npm install sax

何も入っていなかったフォルダ内にnode_modulesフォルダとpackage.jsonpackage-lock.jsonが作成される。

$ ls
node_modules		package-lock.json	package.json

ひとつひとつ中身を確認するとsaxがインストールされていることがわかる。

$ ls node_modules
sax
$ cat package.json
{
  "dependencies": {
    "sax": "^1.4.1"
  }
}
$ cat package-lock.json
{
  "name": "node-npm-install-test",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
      "dependencies": {
        "sax": "^1.4.1"
      }
    },
    "node_modules/sax": {
      "version": "1.4.1",
      "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
      "integrity": "sha512-(略)",
      "license": "ISC"
    }
  }
}

saxをアンインストールするために下記コマンドを実行する。

$ npm rm sax
removed 1 package, and audited 1 package in 235ms

found 0 vulnerabilities

ちなみにvulnerabilitiesとは脆弱性のことであり、上記の結果はsaxパッケージに脆弱性が見つからなかったことを表している。

実行後にnode_modulesフォルダとpackage.jsonpackage-lock.jsonの中身をそれぞれ確認すると以下のようになっている。

$ ls node_modules

$ cat package.json
{}
$ cat package-lock.json
{
  "name": "node-npm-install-test",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {}
}

saxパッケージがアンインストールされていることがわかる。

記事を短くするために省略するが

$ npm install --save sax

$ npm install --save=true sax

の場合も同じ結果になった。

npm install --save=false

さてsaxパッケージをアンインストールしたあと、下記を実行する。

$ npm install --save=false sax

すると下記の結果となった。

$ ls node_modules
sax
$ cat package.json
{}
$ cat package-lock.json
{
  "name": "node-npm-install-test",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {}
}

node_modulesフォルダにはsaxがインストールされているがpackage.jsonpackage-lock.jsonには書き込まれなかった。

まとめ

--saveオプションは依存パッケージとしてインストールするかしないかを表すオプションであり、デフォルトはtrueである。つまり通常はnpm installnpm install --saveは同じ動作をするのでnpm installを使えばよい

特別な意図があって依存パッケージとしてインストールしたくないパッケージに対しては--save=falseとする。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?