LoginSignup
37
36

More than 5 years have passed since last update.

npmに変わるパッケージマネージャーYarnを導入してみる

Last updated at Posted at 2016-12-16

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リポジトリがインストール出来ない

下記のような記載になっているとインストールが上手く行かない

package.json
{
  "dependencies": {
    "some-package": "git+ssh://git@github.com:org/some-package.git#v1.0.0"
  }
}

このような場合は":org"を"/org"にする

package.json
{
  "dependencies": {
    "some-package": "git+ssh://git@github.com/org/some-package.git#v1.0.0"
  }
}

※yarnのgithubではこれに対するPRが出ているので、そのうち修正されると思われる。

ローカルパッケージがインストール出来ない

package.json
{
  "dependencies": {
    "some-local-package": "../some-local-package"
  }
}

こうする

package.json
{
  "dependencies": {
    "some-local-package": "file:./../some-local-package"
  }
}

yarn.lockについて

インストールすると、ルートディレクトリにyarn.lockなるファイルが自動生成される。
このファイルにはインストールされたバージョン情報などが記載され、他の人がインストールするときに全く同じバージョンのパッケージがインストールされるとのこと。

このファイルは、gitなどのバージョン管理に含めることが推奨されており、
「え?自分のマシンだと動くし」みたいなめんどくさいやつが無くなりそう。

補足: pnpm

npm installの時間を短縮しようと、yarn以外でpnpmというものもある。

こちらもnpmに比べて超高速にインストールが可能。
既存プロジェクトで比べた所、インストールに2分とかかかるやつが20秒くらいでインストールされる。
ただし、node_modulesのディレクトリ構成が変わる(シンボリックリンクになる)ため、不具合が出る可能性もある。

37
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
36