webpackやGulpを使う時に覚えて幸せになったnpmの便利な使い方

昨今のweb開発で必要なwebpackやGulpといった技術は、Node.jsのパッケージ管理ツール「[npm](https://www.npmjs.com/)」を通して使われます。**`npm`の機能は豊富で、覚えておくと便利な使い方がいくつもあります**。とくにオススメのものをピックアップしました。

# `npm init`には`-y`をつけると質問が表示されない
`npm`のモジュールを用いたプロジェクトを作成する際、最初に使用するコマンドは`npm init`です。実行すると、プロジェクト名や著作権の設定の質問が表示され、必要な項目を入力したり、Yes([Enter]キー）を入力する必要があります。

**とくに設定が不要な場合、`-y`オプションを指定することで、質問を表示することなく初期化できます**。

```bash:プロジェクトの初期化を省略
npm init -y
```

次に示すのは、`npm init`と`npm init -y`実行後のコマンドラインの差です。`npm init`は`name`や`version`といった設定を対話形式で尋ねられますが、`npm init -y`ではそれがありません。

![npminit.png](https://qiita-image-store.s3.amazonaws.com/0/67884/3fc0afc2-2fcc-83b9-8d05-a244205ffce2.png)


# インストールコマンドの省略
パッケージインストール時の`npm install`コマンドは使用頻度が高いですが、**わざわざ「`install`」と7文字も打つのは面倒です。「`i`」と省略ができます**。

```bash:installの省略
npm i
```

パッケージのインストールはこうなります。

```bash:パッケージのインストール
npm i (パッケージ名)
```

ちなみにアンインストールはこちら

```bash:パッケージのアンインストール
npm un (パッケージ名)
```

## 依存オプションの省略
開発時のみに利用するパッケージをインストールして`package.json`に記録するため、`npm install --save-dev (パッケージ名)`とすることが多いでしょう。**`--save-dev`と10文字も書くのは時間がかかる↑タイプミスをしてしまう恐れがあるので、`-D`で省略しましょう**。

```bash:ローカルへのインストール
npm i -D
```

たとえば、Gulpをローカル環境にインストールするならば、次のようになります。

```bash:ローカルへのインストール
npm i -D gulp
```

ちなみに、グローバル指定をする`-g`もよく使います。

なお、`--save`はnpm v5から標準でつくようになったので省略可能です。

## アンインストールコマンドの省略
パッケージのアンイストール`uninstall`は、`un`で省略できます。

```bash:パッケージのアンインストール
npm un (パッケージ名)
```

パッケージをアンインストールし、package.jsonからも削除する場合は、前述の`-D`オプションと組み合わせます。

```bash
npm un -D (パッケージ名)
```

# パッケージはまとめてインストール可能
開発環境を構築する際、1モジュールずつインストールしていくのは手間です。

```bash:パッケージを一つずつインストール
npm i -D gulp
npm i -D webpack
npm i -D node-sass
```

パッケージはまとめてインストールできるので、時短になります。

```bash:パッケージを一つずつインストール
npm i -D gulp webpack node-sass
```
# 使用しているパッケージ群を最新版にアップデートする
パッケージは日々アップデートされています。使用しているパッケージを最新版にアップデートしたい場合は、次のコマンドを実行します。

```bash:使用中のパッケージの更新
npm update -D
```

たとえば、gulpのv3.5.0、gulp-sassのv2.0.0を使っているプロジェクトがあるとします。`package.json`の`devDependencies`には次の記述があります。

```json:package.jsonの更新前
{
  "devDependencies": {
    "gulp": "^3.5.0",
    "gulp-sass": "^2.0.0"
  }
}
```

この状態で`npm update -D`を実行すると、gulpおよびgulp-sassの最新パッケージが自動的にインストールされ、`package.json`内も更新されます。

```json:package.jsonの更新後
{
  "devDependencies": {
    "gulp": "^3.9.1",
    "gulp-sass": "^2.3.2"
  }
}
```

古いプロジェクトのpackage.jsonを使い回している場合は、必要に応じてアップデートするとよいでしょう。

# パッケージを再インストールする
パッケージのインストールやアンインストールを繰り返すと、キャッシュゆえに予期せぬエラーが発生しえます。**モジュールの挙動がおかしい場合は、キャッシュの整合性チェック、モジュールの再インストールを試してみると解決できる場合があります**。

1. node_modulesフォルダーの削除
2. packge.jsonに記載されたパッケージの再インストール

の実行方法は下記の通りです。

```bash:パッケージの再インストール
rm -rf node_modules
npm cache verify
npm i
```

キャッシュについての参考記事「[cache | npm Documentation](https://docs.npmjs.com/cli/cache)」

# スクリプトの実行(npm-scripts)
package.jsonの`scripts`に記述したスクリプトを`npm run (スクリプト名)`実行できるnpm-scriptsの機能があります。たとえば次のように文字列を「Hello tonkotsuboy!!」という文字列を出力する「`mytask`」を記述します。

```json:pakage.json
{
  "scripts": {
    "mytask": "echo 'Hello tonkotsuboy!!'"
  },
}
```

プロジェクトフォルダーに移動し、`npm run`コマンドを`mytask`を実行します。

```bash:コマンドライン
npm run mytask
```

![](https://qiita-image-store.s3.amazonaws.com/0/67884/70ebaf8c-6ba9-91d1-1970-5f63c923e0b1.png)

**npm-scriptsの強みは、node_modules以下にインストールしたモジュールを実行できる点です**。たとえばGulpはグローバル環境、ローカル環境の両方にgulpをインストールするのが一般的ですが、npm-scriptsを駆使すればグローバルにGulpをインストールする必要がなく、**ローカル環境のパッケージのみに依存した構成が可能です**。

```json:npm-scriptsでGulpを使う例
{
  "scripts": {
    "build": "gulp build",
    "watch": "gulp watch"
  }
}
```

# ローカルパッケージを手軽に実行したければnpx

次の記事にまとめました。

[npm 5.2.0の新機能！ 「npx」でローカルパッケージを手軽に実行しよう - Qiita](https://qiita.com/tonkotsuboy_com/items/8227f5993769c3df533d)

# npmを恐れることなかれ
npmを使ったコマンドライン操作は今の時代避けて通れませんが、工夫次第で便利に操れます。とくに`install`周りの省略は、タイピング量が減ってミスを防ぐことができます。オススメのコマンドばかりなので、知らないものがあれば是非試してみてください。