npmのコマンド まとめ 

## 目次
1. [インストール系](#1-インストール系)
2. [パッケージやnpmの情報表示](#2-パッケージやnpmの情報表示)
3. [パッケージの検索・監査](#3-パッケージの検索監査)
4. [パッケージ開発](#4-パッケージ開発)
5. [その他](#5-その他)


## 1. インストール系
### npm init
初期化（package.jsonファイルを作成）する。

```shell
$ npm init

# パッケージ名などを入力するのを省略したい場合
$ npm init -y
$ npm init --yes
````
### npm install
package.json（またはpackagelock.json、npmshrinkwrap.json）ファイルに記載したパッケージとそれらのパッケージに依存するパッケージをインストールする。
具体的には、node_modulesフォルダを作成し、必要なファイルをインストールする。

```shell
# package.jsonに記載されてあるパッケージをインストールする
$ npm install

# 以下でも実行が可能
$ npm i
$ npm add

# パッケージを指定してインストールする
$ npm install [package name]
$ npm install react 　

# パッケージのバージョンを指定してインストールする
$ npm install [package name]@version
$ npm install react@16            # reactのバージョン16をインストール
$ npm install react@latest        # reactの最新バージョンをインストール

# グローバルモードでパッケージをインストールする
$ npm install -g [package name]
$ npm install --global [package name]

# devDependenciesとしてインストールする（デフォルトはDependenciesとしてインストールする）
$ npm install -D [package name]
$ npm install --save-dev [package name]

# package.jsonに追記せずにインストールする
$ npm install --no-save [package name]
```

### npm ci
package-lock.json（またはnpm-shrinkwrap.json）の内容にそってパッケージをインストールする。
(npm installコマンドより高速に動作する)

**npm installとの違い**

* package-lock.json or npm-shrinkwrap.jsonが存在する必要がある。
* package-lock.jsonの依存関係がpackage.jsonの依存関係と一致しない場合、npm ciはpackage-lock.jsonを更新せずにエラーで終了する。
* npm ciはパッケージ全体をインストールすることしかできない（個別は無理）。
* node_modeulesが既に存在する場合、npm ciがインストールを開始する前に自動的に削除される。
* package.jsonやpackage-lock.jsonへの書き込みは行われない。

### npm unistall
パッケージをアンインストールする。

```shell
# 指定パッケージをアンインストールする
$ npm uninstall [package name]
$ npm uninstall react     # reactをアンインストールする

# 以下でも実行が可能
$ npm remove [package name]
$ npm rm [package name]
$ npm r [package name]
$ npm un [package name]
$ npm unlink [package name]

# package.jsonのdependenciesから削除し、パッケージをアンインストールする
$ npm uninstall -S [package name]
$ npm uninstall --save [package name]

# package.jsonのdevDependenciesから削除し、パッケージをアンインストールする
$ npm uninstall -D [package name]
$ npm uninstall --save-dev [package name]

# package.jsonのoptionalDependenciesから削除し、パッケージをアンインストールする
$ npm uninstall -O [package name]
$ npm uninstall --save-optional [package name]

# package.jsonから削除せず、パッケージをアンインストールする
$ npm uninstall --no-save [package name]
```

### npm prune
インストールされた不要なパッケージを削除する。
package-lockを有効にしている場合、自動的にnpm pruneされるため不要。

### npm edit
インストールしたパッケージを編集する。
具体的には、デフォルトのエディタでインストールしたパッケージのディレクトリを開く。

```shell
$ npm edit [package name]
```

### npm update
インストールされたパッケージを最新のバージョンに更新する。

```shell
# 全てのパッケージを最新バージョンに更新する
$ npm update

# 以下でも実行が可能
$ npm up
$ npm upgrade

# パッケージを指定した場合は、指定したパッケージのみ最新のバージョンに更新する
$ npm update [package name]
```

### npm outdated
パッケージのバージョンが古いかをチェックする。
インストールされたパッケージの現在のバージョン、最新のバージョンなどを表示する。

```shell
$ npm outdated [package name]
```

### npm dedupe
依存関係の都合上で同じパッケージが異なるバージョンで複数インストールされた場合などに、
パッケージの重複を整理する。

```shell
# パッケージの重複を整理
$ npm dedupe

# 以下でも実行が可能
$ npm ddp
$ npm find-dups
```

## 2. パッケージやnpmの情報表示
### npm
npmの使い方を簡易表示する。
（使用できるnpmのコマンド一覧、helpを表示する方法など）

```shell
# npmの使い方を簡易表示
$ npm

# npmの使い方を詳細表示する
$ npm -l

# npmコマンドのクイックヘルプを表示する
$ npm [command] -h
$ npm install -h   # インストールのヘルプを表示

# npmのインストールバージョンを表示する
$ npm --version
$ npm -v
```

### npm help
npmのヘルプを表示する。

```shell
# npmのヘルプを表示
$ npm help
```

### npm config
npmの設定ファイルを管理する。
（設定ファイルの内容を表示したり、追加・削除・変更を行う）

```shell
$ npm config

# 以下でも実行が可能
$ npm c

# 設定ファイルの内容一覧を表示する
$ npm config list

# 設定ファイルに内容を追加する
$ npm config set [key] [value]

# 設定ファイルの内容を取得する
$ npm config get [key] [value]

# 設定ファイルの内容を削除する
$ npm config delete [key] [value]

# 設定ファイルの内容を削除する
$ npm config edit
```

### npm ls
インストールされたパッケージを一覧表示する。

```shell
# インストールされたパッケージを一覧表示
$ npm list

# 以下でも実行が可能
$ npm la
$ npm li

# 表示する階層はトップレベルのみ（依存するパッケージは表示しない）
$ npm ls --depth=0
```

### npm view
レジストリやパッケージの情報を表示する。

```shell
$ npm view [package name]

# 以下でも実行が可能
$ npm info [package name]
$ npm show [package name]
$ npm v [package name]
```

### npm root
npmのルートフォルダを表示する。
具体的には、npm_modulesの絶対フォルダパスを表示する。

```shell
$ npm root
```

### npm bin
npmのbinディレクトリを表示する。

```shell
$ npm bin

# グローバルモードでnpmのbinディレクトリを表示する
$ npm bin -g
$ npm bin -global
```

### npm explore
インストールされたパッケージのディレクトリを表示する。

```shell
# 指定パッケージのディレクトリを表示
$ npm explore [package name]
```

### npm docs
Webブラウザでパッケージのドキュメント/公式サイトを表示する。

```shell
# 指定パッケージの公式サイトを表示
$ npm docs [package name]

# 以下でも実行が可能
$ npm home [package name]
```

### npm repo
Webブラウザでパッケージのリポジトリを表示する。

```shell
# 指定パッケージのリポジトリを表示
$ npm repo [package name]
```

### npm bugs
Webブラウザでパッケージのバグ/Issueを表示する。

```shell
# 指定パッケージのバグ/Issueを表示
$ npm bugs [package name]
```

## 3. パッケージの検索・監査

### npm search
レジストリからパッケージを検索する。

```shell
# 指定パッケージを検索
$ npm search [package name]

# 以下でも実行が可能
$ npm s [package name]
$ npm se [package name]
$ npm find [package name]
```

### npm audit
セキュリティ監査を実行する。
（インストールしたパッケージの脆弱性をスキャンする）

```shell
# セキュリティ監査をする
$ npm audit

# セキュリティ監査を実行し、json形式で出力する
$ npm audit --json

# セキュリティ監査を実行して脆弱性のあるバージョンはアップデートをする
$ npm audit fix

# セキュリティ監査を実行して、脆弱性のあるパッケージは互換性のあるバージョンにアップデートする
# 破壊的変更がある場合でも実行するため注意
$ npm audit fix --force

# セキュリティ監査を実行して、脆弱性のあるパッケージは互換性のあるバージョンにアップデートする
# ただし、node_modulesは変更せずpackage-lock.jsonを更新する
$ npm audit fix --package-lock-only

# セキュリティ監査を実行して、脆弱性のあるパッケージは互換性のあるバージョンにアップデートする
# ただし、devDependenciesは除く
$ npm audit fix --only=prod

# セキュリティ監査を実行して、脆弱性のあるパッケージは互換性のあるバージョンにアップデートする
# 監査の修正がどのように行われるかを把握したり、インストール情報をJSON形式で出力したりする
$ npm audit fix --dry-run --json
```

### npm doctor
npmが正常に動作する状態にあるか、使用している環境をチェックする。
チェック内容は以下の通り。

* Node.jsとgitが実行できること
* プライマリのnpmレジストリであるregistry.npmjs.comが利用可能できあること
* node_moduleが存在し、現在のユーザーが書き込み可能であること

```shell
$ npm doctor
```

## 4. パッケージ開発

### npm adduser
指定のレジストリにユーザーアカウントを追加する。

```shell
# http://myregistry.example.comレジストリにユーザーアカウントを追加する場合
$ npm adduser --registry=http://myregistry.example.com
```

### npm test
パッケージのテストをする。

```shell
$ npm test
```

### npm build
パッケージのビルドをする。

```shell
$ pm build [package folder]
```

### npm rebuild
パッケージのリビルドをする。

```shell
$ npm rebuild [package folder]
```

### npm publish
パッケージを公開する。

```shell
$ npm publish [folder]
```

### npm unpublish
パッケージを非公開にする。
レジストリからパッケージを削除する。

```shell
$ npm unpublish [package]
```

### npm version
パッケージのバージョンを更新する、など。

```shell
# メッセージを設定してバージョン番号を更新する場合（%sはバージョン番号に置き換えられる）
$ npm version patch -m "Upgrade to %s for reasons"
```

### npm deprecate
パッケージの指定バージョンを非推奨にする。

```shell
$ npm deprecate[package@version]
```

### npm dist-tag
ディストリビューションタグを変更する。

```shell
# ディストリビューションタグを追加する場合
$ npm dist-tag add[package@version][tag]
```

### npm shrinkwrap
npm-shrinkwrap.jsonファイルを作成する。

```shell
$ npm shrinkwrap
```

### npm pack
パッケージからtarballを作成する。

```shell
npm pack [package]
```

### npm ping
レジストリにpingする。

```shell
$ npm ping [registry]
```

### npm profile
レジストリのプロフィールを変更する。

```shell
# プロフィールのプロパティに値を設定する場合
$ npm profile set [property] [value]
```

### npm star / npm unstar
お気に入りのパッケージをマークする / マークをはずす。

```shell
# お気に入りのパッケージをマークする
$ npm star[package]

# お気に入りのパッケージのマークをはずす
$ npm unstar [package]
```

### npm stars
お気に入りのパッケージを表示する。

```shell
$ npm stars [user]
```

## 5. その他
### npm completion
コマンドのタブ補完を可能にする。

```shell
# Bashに設定する場合
$ npm completion >> ~/.bashrc

# Zshに設定する場合
$ npm completion >> ~/.zshrc
```

### npm xmas
ネタ、クリスマスツリーのアスキーアートを表示する。


```shell
$ npm xmas
```