shigeki.takeguchi.log

アラフィフおじさんの技術日記

npmがわりとゆるふわ過ぎたのでYarnに移行するか検討するためにいろいろやってみた

https://yarnpkg.com/

Facebookが作ったというnpmとの互換パッケージマネージャ

Node.js系のパッケージマネージャーといえばnpmです。いろいろありますがかなり便利なのでずっと使ってました。
ただnpmで管理していたパッケージの機能がローカルでは動くけど、どうも本番で動いてないんじゃない?的なことがあって
どうやらそのパッケージのバージョンの違いで動いてない的なことが起こっているんじゃないか疑惑があってnpmってそういえば、
バージョンとかけっこうゆるふわというか多少のバージョンの違いとか気にしなくていいってところがいいんだけど、それって何かあったときにやば過ぎじゃないの?って気になった。
今まで遭遇しなかっただけでバージョンの違いでこんなやらかしがあるのか。。。
じゃあ対策ないの?どうしようかってことでYarnを検討してます。

このYarnですがnpmにはないyarn.lockというファイルが生成されまして、これがまぁRubyのgemなんかだとGemfile.lockというのと同じか似ている感じだと思ってます。
Gemfile.lockは開発環境と運用環境で同じgemをインストールするために使うらしいんですがそれと同じような仕組みになっているという認識。
実際には導入してませんが今のところいい感じで使えてます。npmよりもさくさく動くってところもいい。

Yarnのインストール

インストールはbrewからやるとまあ簡単ですわな。 これはMacの場合ね。ちなみに会社も家のマシンも最近立て続けにmacOS Sierraにしました。

1
2
brew update
brew install yarn

念のためにバージョンの確認です。インストールうまくいってたらバージョンでます。 これ書いているときは0.19.1ですね。

1
2
yarn --version
0.19.1

Yarnの初期プロジェクト作成的な

で適当にプロジェクトフォルダにうつって

1
yarn init -y

これでnpmでもお世話になっていたpackage.jsonできます。

ちなみに

1
2
npm --version
3.3.12

でnpmでinitしたときにできたpackage.jsonはこれです。

1
2
3
4
5
6
7
8
9
10
11
12
{
"name": "hoge",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}

こちらはyarnのinitの場合はこれです。

1
2
3
4
5
6
7
{
"name": "01",
"version": "1.0.0",
"main": "index.js",
"repository": {},
"license": "MIT"
}

ちょっとシンプルになってます。

npmとの違い

1
2
npm install jquery --save
yarn add jquery
1
2
npm install autoprefixer --save-dev
yarn add autoprefixer --dev

shigeki.takeguchi

渋谷の某ソーシャルゲームの会社でフロントエンドエンジニアとして働いてます。20世紀よりウェブ業界。気づいたらアラフィフ業界人です。
まだまだ現場で粘り強く作る側でいたいと思います。