yarnに乗り換えてみた
Facebook OSSの話題に触れてるうちに、yarnにしてみっかなと。yarnのライセンスはFacebook OSSの特徴となったBSD-3-ClauseではなくBSD-2-Clauseですけど、そこはかとなくFacebookな匂いの子です。今までニーズがなかったから入れ替えてなかったけど、むしろ今こそ楽しげかなとノリで。
まず、node関連を大掃除しました。私はnodeをHomeBrewや公式配布インストーラやnやらでその時々適当にやってたのでゴミだらけです。まずHomeBrewから抜く。私は抜いてあったので結果としておまじない。
$ brew unlink node $ brew uninstall node
/usr/local/bin、/usr/local/lib、/usr/local/include、/usr/local/Celler、/var/db/receiptsの下のnode、n、npm、npxの関係者とわかるものを削除し、npmのグローバルリポジトリのロック&キャッシュである ~/.npmとプロジェクトリポジトリのnode_modulesとpackage-lock.jsonを削ります。/usr/local/includeにはがっつり何時のかわからんnodeのcヘッダファイル群がハードコピーされてた。HomeBrewで管理するとこれはCellerへのリンクになります。
$ brew install yarn $ brew link node
あとはプロジェクトのフォルダに移ってモジュールの取り込み直し。
$ yarn install $ git add yarn.lock
https://yarnpkg.com/en/docs/yarn-lock#toc-check-into-source-control
yarn.lockファイルは上記URLのドキュメントによるとバージョン管理にぶっ込むことが常道らしい。should be checked into source controlって書いてある。
豆として、yarnはツールだけでリポジトリはnpmjs.orgを見てるのでnpmと同じ。loginとかcreateとかのライブラリ公開関係はことごとくnpm.orgをターゲットとしているとドキュメントに書いてある。npmはグローバルモジュールリポジトリが~/.npmでした。yarnは、~/config/yarn/globalになります。私はグローバルにはもともとnpmとnしか入ってなかったので、このyarnのグローバルには何も入れるものがなくなっちゃった。今後のnodeのバージョン管理(もちろんyarnも)はnをやめてHomeBrewでやります。
超いらない豆としては、yarnはML言語なるもので書かれてますね。関数型言語らしいんだけど言語の名前自体初めて知ったぐらいなので読めない。
yarn runがちょっと違う
yarn run <スクリプト名> で、package.jsonのscriptsエントリに登録されたものを実行するのはnpmと変わらないのですが、yarn run <./node_modules/.bin/以下の実行ファイル> で実行できるようになっていました。私はdirenvで./node_modules/.binにパスを通していましたがこれは不要になるな。
Flow-bin問題
yarnでインストールするとflow-binのプラットフォーム別バイナリのユーザー実行権限が落ちてるということはなかった。いいがかりかもしれないけど、冒頭でそこはかとなくFacebookな匂いがすると言ったことの一つ。ほか公式WEBドキュメントがFlowとyarnでまるっきり一緒の作りなことも一つ。
WebStormでの設定
Configuring Node.js Interpreters - Help | WebStorm
愛用するWebStormではサイレントにyarn対応していました。現行バージョンでは偽npmとして取り扱います。
WebStormのnodeインタプリタの設定のところで、NPM Packageをyarnに切り替えると、もうnpmは一切いらない。間違って使わないように/usr/local/lib/node_modules/npmは削ってしまった。
yarnでnpmをインストールし、そのまますぐアンインストールした
その後のたった半日ではありますが一連の運用で不都合はないけど、あとで万一npmが必要になったら「$ yarn global add npm」すれば良いと思う。思ったのですぐやってみた。
$ yarn global add npm yarn global v0.27.5 warning package.json: No license field warning No license field [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh packages... success Installed "npm@5.4.0" with binaries: - npm - npx warning No license field Done in 6.18s. $ ls -l /usr/local/bin|grep npm lrwxr-xr-x 1 masataka_k admin 77 9 1 16:56 npm -> ../../../Users/masataka_k/.config/yarn/global/node_modules/npm/bin/npm-cli.js lrwxr-xr-x 1 masataka_k admin 77 9 1 16:56 npx -> ../../../Users/masataka_k/.config/yarn/global/node_modules/npm/bin/npx-cli.js
ちゃんとインストールされています。もちろん使えますが、使わないのでアンインストール。
$ yarn global remove npm
跡形もなくなりました。
yarnの効能
コンソールに流れるメッセージがきちんとしたサマリーになってわかりやすくなったこと。地味に「yarn why」が楽しい。速くなったかどうだかは、並べて比べてないのでわかんないな。