npmのinstallが遅い? yarnを試しましょう。
Yarnとは
https://yarnpkg.com/
Facebook2016年10月にローンチした新しいパッケージマネージャー。
開発にはGoogleを始めとする企業のエンジニアが携わっているらしい。
サイトにも書かれている通り、Ultra Fast らしい。
特徴
- 早い
- 特に2回目以降のinstallはキャッシュが使われるため非常に高速になる
- オフラインでもキャッシュあればインストール可能
- yarn.lockによりインストールバージョンが固定される(後述)
- 重複バージョンをインストールしないように出来る
- サイズが減る(ただし、動作確認しないと悲惨なことになりそう)
インストール
とりあえず、Macにインストールしてみる。
npm install
でもいいけど、npmからの乗り換えのために作られたのでbrewでのインストールが推奨されている。
$ brew install yarn
$ yarn --version
0.17.2
まだv1.0.0ではないらしい。
すでにnpm入れていて、yarnに乗り換えるとき
package.jsonはnpm互換とのことで、そのまま使える。※例外あったので後述
$ cd [project_directory]
$ rm -rf node_modules/
$ yarn (or yarn install)
これで完了。
初めてyarnを試す時
$ cd [project_directory]
$ yarn init
// nameとかversionとか聞かれるので入力する
$ yarn add [package]
addとかremoveとかupgradeは公式ドキュメントを見る
https://yarnpkg.com/en/docs/usage
速度
とあるPJで測定してみると・・・
Ultra Fast!
// npm install
real 1m29.153s
user 1m1.950s
sys 0m13.633s
// yarn(1回目)
real 0m14.794s
user 0m9.357s
sys 0m4.429s
// yarn(2回目)
real 0m0.923s
user 0m0.932s
sys 0m0.069s
npmとの互換性について
private githubリポジトリがインストール出来ない
下記のような記載になっているとインストールが上手く行かない
{
"dependencies": {
"some-package": "git+ssh://git@github.com:org/some-package.git#v1.0.0"
}
}
このような場合は":org"を"/org"にする
{
"dependencies": {
"some-package": "git+ssh://git@github.com/org/some-package.git#v1.0.0"
}
}
※yarnのgithubではこれに対するPRが出ているので、そのうち修正されると思われる。
ローカルパッケージがインストール出来ない
{
"dependencies": {
"some-local-package": "../some-local-package"
}
}
こうする
{
"dependencies": {
"some-local-package": "file:./../some-local-package"
}
}
yarn.lockについて
インストールすると、ルートディレクトリにyarn.lock
なるファイルが自動生成される。
このファイルにはインストールされたバージョン情報などが記載され、他の人がインストールするときに全く同じバージョンのパッケージがインストールされるとのこと。
このファイルは、gitなどのバージョン管理に含めることが推奨されており、
「え?自分のマシンだと動くし」みたいなめんどくさいやつが無くなりそう。
補足: pnpm
npm installの時間を短縮しようと、yarn以外でpnpmというものもある。
こちらもnpmに比べて超高速にインストールが可能。
既存プロジェクトで比べた所、インストールに2分とかかかるやつが20秒くらいでインストールされる。
ただし、node_modulesのディレクトリ構成が変わる(シンボリックリンクになる)ため、不具合が出る可能性もある。