yarnのコマンドチートシート

## yarnのコマンドチートシート
とりあえずよく使いそうなコマンドを列挙しておきます。
まだまだ少ないですが、新しいコマンドを使ったら随時追加していきます。

### yarn init
| コマンド | 説明 |
|:---|:---|
| yarn init | 新規プロジェクト作成 |
| yarn init -y | プロジェクト名やVersionの入力を省略して新規作成 |

### yarn add
| コマンド | 説明 |
|:---|:---|
| yarn add \<package...> | パッケージ追加 |
| yarn add \<package...>@[version] | バージョン指定でパッケージ追加 |
| yarn add \<package...>@[tag] | タグ指定でパッケージ追加 |
| yarn add \<package...> [--dev&#124;-D] | devDependenciesにパッケージ追加 |
| yarn add \<package...> [--peer&#124;-P] | peerDependenciesにパッケージ追加 |
| yarn add \<package...> [--optional&#124;-O] | optionalDependenciesにパッケージ追加 |
| yarn add \<package...> [--exact&#124;-E] | バージョンを厳密に指定してパッケージ追加 |
| yarn add \<package...> [--tilde&#124;-T] | 指定したminorバージョンまでを固定してパッケージ追加 |

#### peerDependenciesについて
[公式](https://yarnpkg.com/en/docs/dependency-types#toc-peerdependencies)にはreact-domとreactのような依存関係のようなものとあります。
react-domを動かすにはreactが必要で特定バージョンを優先して使用したい場合
などといった場合はこの追加オプションを使用するのだと思います。
※解釈間違っていたらご指摘くださいm(__)m


#### optionalDependenciesについて
[公式](https://yarnpkg.com/en/docs/dependency-types#toc-optionaldependencies)には全てのマシンで動作させる必要がない場合とあります。
例としてWatchmanが上がっています。


#### --exact/-E オプションについて
デフォルトだとmajorバージョンが同一で最新のリリースバージョンが追加されるようになっているので、
特定バージョンのみを追加したい場合はこちらのオプションを使います。
以下具体例になります。

```bash
# fooパッケージの最新バージョンは1.9.1とします
# オプション指定なしの場合
$ yarn add foo@1.2.3  # 1.9.1が追加されます

# オプション指定ありの場合
$ yarn add foo@1.2.3 --exact  # 1.2.3が追加されます
```

#### --tilde/-T オプションについて
指定したminorバージョンまでを固定してパッケージを追加したい場合に使います。
以下具体例になります。

```bash
# fooパッケージに1.2.9と1.3.0(最新)のバージョンが存在するとします
# オプション指定なしの場合
$ yarn add foo@1.2.3  # 1.3.0が追加されます

# オプション指定ありの場合
$ yarn add foo@1.2.3 --tilde  # 1.2.9が追加されます
```

### yarn install
| コマンド | 説明 |
|:---|:---|
| yarn install | インストール |
| yarn install --check-files | インストール + node_modulesにあるファイルが削除されていないことを確認 |
| yarn install --flat | インストール + パッケージ毎に一つのバージョンのみを許可 |
| yarn install --force | 強制インストール |
| yarn install --ignore-scripts | インストール + package.jsonに書かれている`scripts`は実行しない |
| yarn install --production[=true&#124;false] | インストール + production用インストールをする(しない)の制御 |


#### --flatオプション
実行すると以下のように対話モードでバージョンを選択していきます。

```bash
$ yarn install --flat
yarn install v0.27.5
info No lockfile found.
[1/4] Resolving packages...
info Unable to find a suitable version for "core-js", please choose one by typing one of the numbers below:
  1) "core-js@^2.5.0, core-js@^2.4.0" which resolved to "2.5.1"
  2) "core-js@^1.0.0" which resolved to "1.2.7"
Answer?: 1
```

インストールが完了するとpackage.jsonの中はこうなります。
※抜粋

```package.json
  "resolutions": {
    "core-js": "2.5.1",
    "strip-ansi": "3.0.1",
    "supports-color": "4.4.0",
    "ansi-regex": "2.1.1",
    "jsesc": "1.3.0",
    "minimist": "0.0.8",
    "acorn": "5.1.2",
    "ajv": "5.2.2",
    "yargs": "8.0.2",
    "inherits": "2.0.3",
    "string_decoder": "0.10.31",
    "punycode": "1.4.1",
    "hash-base": "2.0.2",
    "camelcase": "4.1.0",
    "cliui": "3.2.0",
    "kind-of": "3.2.2",
    "is-number": "2.1.0",
    "string-width": "2.1.1",
    "is-fullwidth-code-point": "2.0.0",
    "assert-plus": "0.2.0"
  }
```

#### --productionオプション
このオプションを指定してインストールすると、devDependenciesに記載しているパッケージはインストールされません。なので、production環境にインストールする際にはこちらのオプションをつけてインストールするといいと思います。

また、公式にも書いてありましたが、yarnは通常環境変数の`NODE_ENV`を見て環境判別をしていて、`NODE_ENV`に`production`が設定されていればこのオプションがなくてもproduction用インストールがされます。

このオプションは`NODE_ENV`が設定されていてもその設定を無視し、オプションに与えられた設定を優先します。


### yarn config
| コマンド | 説明 |
|:---|:---|
| yarn config list | 現在の設定を表示 |
| yarn config get \<key> | \<key>の設定を標準出力 |
| yarn config set \<key> \<value> [-g&#124;--global] | \<key>の設定に\<value>を追加 |
| yarn config delete \<key> | \<key>の設定を削除 |

#### cacheディレクトリの変更コマンド
```bash
yarn config set cache-folder <path>
```

### yarn cache
| コマンド | 説明 |
|:---|:---|
| yarn cache list | cacheされているパッケージの一覧表示 |
| yarn cache dir | cache先のディレクトリパスを表示 |
| yarn cache clean \<module_name> | <module_name>のキャッシュ削除|


### yarn info
| コマンド | 説明 |
|:---|:---|
| yarn info \<package> | \<package>の情報を表示 |
| yarn info \<package>@[version] | \<package>の特定バージョンの情報を表示 |
| yarn info \<package>  [\<field>] | \<package>の\<field>情報のみを表示 |
| yarn info \<package> --json | \<package>の情報をjsonで表示 |

こちらのコマンドは特定パッケージの情報を表示するコマンドですが、
特徴としてローカルにインストールされている必要はないというところです。

#### field指定サンプル
```bash
# reactのdescriptionを見たい時
$ yarn info react description
```