yarnチートシート

webpackに引き続き、Railsが推してるフロントパッケージマネージャのyarnを調べてみました。npmも慣れてきたんで変えるのやだなー、と思ってたのですが互換性高くて移行しやすいし、動作も速くていい感じです。

## 概要

yarn = フロント(js)のパッケージマネージャ


- Facebook発、オープンソース、BSDライセンス

- npmと互換性がある
    - npmと同じ`package.json`, `node_modules/`で構成される
    - コマンドも似ている

- バージョンの厳密な管理ができる
    - `package.json`でバージョンそのものではなく、許容するバージョンの範囲を指定する
    - 実際にインストールされた際のバージョンは`yarn.lock`に記録され、別マシンで再現可能になる
- npmに比べて高速に動作する



## 導入

Homebrewあるいはnpmでインストールできる。

```bash
# Homebrewから
$ brew install yarn
```

```bash
# npmから
$ npm --global install yarn
```


## npmとの対応

[公式によく使うnpmコマンドとの対応一覧がある](https://yarnpkg.com/en/docs/migrating-from-npm)ので参照のこと。

上記のリストに加えて自分がよく使いそうなコマンドを抜粋:


npm                                 | yarn                          |  機能
---                                 | ---                           | ---
`npm init`                          | `yarn init`                   | 管理を開始(インタラクティブ)
`npm init -y`                       | `yarn`                        | 管理を開始(即時)
`npm install`                       | `yarn install`                | 記録されたパッケージをインストール
`npm install --save [package@version]`      | `yarn add [package@version]`          | インストール + 記録
`npm install --save-dev [package]`  | `yarn add --dev [package]`    | 開発環境にのみインストール + 記録
`npm install --global [package]`    | `yarn global add [package]`   | グローバルにインストール        
`npm uninstall --save [package]`    | `yarn remove [package]`       | パッケージと記録を削除
`npm uninstall --save-dev [package]`| `yarn remove [package]`       | 開発環境のパッケージと記録を削除
`npm update --global`               | `yarn global upgrade`         | グローバルのパッケージ全体を更新
`rm -rf node_modules && npm install`| `yarn upgrade`                | ローカルのパッケージ全体の更新
`npm update [package]`              | `yarn upgrade [package]`      | ローカルのパッケージの更新
`npm cache clean`                   | `yarn cache clean`            | キャッシュクリア
`npm info [package]`                | `yarn info [package]`         | パッケージ情報の表示
`npm outdated`                      | `yarn outdated`               | 古いパッケージ一覧の表示
`npm run [script]`                  | `yarn run [script]`           | package.json内のscriptに定義されたスクリプトを実行
`npm search [package]`              | なし？<br/>`yarn info [package]`で一応調べられる | パッケージのバージョン一覧の取得

package.jsonに記録しないでインストールする`npm install` に相当する機能はなくなった。パッケージの管理が常に記録されるようになって厳密さが増してる感がある。



## yarn独自の機能

コマンドの一覧は[公式のリファレンス](https://yarnpkg.com/en/docs/cli/)を参照のこと。
便利そうなyarn独自(と思われる)コマンドを抜粋:

yarn                            | 機能
---                             | ---
`yarn check`                    | package.jsonの内容を検証する
`yarn create [kit] [project]`   | `[kit]`に規定の方法でプロジェクトを新規作成する。(`react-app`など)
`yarn licenses ls`              | インストール済みパッケージのライセンス一覧を表示
`yarn versions`                 | 関連するミドルウェアのバージョン表示
`yarn why [package]`            | パッケージがインストールされた経緯を表示




## 参照

- [yarn(公式)](https://yarnpkg.com/lang/en/)
    - [Migrating from npm](https://yarnpkg.com/en/docs/migrating-from-npm)
    - [Docs / CLI](https://yarnpkg.com/en/docs/cli/)

- [Yarn：Facebook発のパッケージマネジャーはnpmに代わるスタンダードになるか](https://www.webprofessional.jp/yarn-vs-npm/)
- [Facebookが公開した新しいJavaScriptパッケージマネージャ: Yarn](http://nukosuke.hatenablog.jp/entry/javascript/facebook-yarn-package-manager)
- [npm互換のJavaScriptパッケージマネージャーYarn入門](https://ics.media/entry/13838)
- [Qiita - npm shrinkwrapで依存モジュールのバージョンを固定](http://qiita.com/oohira/items/d4736268fc0f1c0e91db)
- [npm - package.json Specifics of npm's package.json handling](https://docs.npmjs.com/files/package.json)