Help us understand the problem. What is going on with this article?

Yarnファーストインプレッション

More than 3 years have passed since last update.

Yarn とは

https://github.com/yarnpkg/yarn

名前から yet another ... な雰囲気を漂わせてますが、 npm互換 です。(追記: 正確にはnpmの生成するpackage.jsonと互換とのことだった)。各所から node連中はまたツール増やしやがって!という雰囲気を感じるので、ここは明確にした方がいい。(techcrunchの記事とかそういう印象を与える書き方になってる)

  • npm install 時のディレクトリ配置への介入
  • npm install 時のより賢いローカルキャッシュ
  • yarn.lock ファイルでバージョン固定

yarn 環境下で yarn add, yarn install などを行った場合、 yarn.lock と package.json に同時に書き込み、 その環境で生成されたファイルは yarn なしでも動きます。つまり、yarn はより厳密に npm のバージョンを固定したい人向け。

基本的な使い方

https://yarnpkg.com/en/docs/usage をみて

バージョンコンフリクト時の挙動

yarn.lock を手元で意図的にコンフリクトさせた場合、package.jsonの側に自動的に修正されました。ここはオプションで止めたり警告出したり出来たほうがよいと思う。

オプション

yarn -h みたら一発

  Usage: yarn install [flags]

  Options:

    -h, --help                  output usage information
    -V, --version               output the version number
    --offline                   
    --prefer-offline            
    --strict-semver             
    --json                      
    --global-folder [path]      
    --modules-folder [path]     rather than installing modules into the node_modules folder relative to the cwd, output them here
    --packages-root [path]      rather than storing modules into a global packages root, store them here
    --mutex [type][:specifier]  use a mutex to ensure only one yarn instance is executing
    --har                       save HAR output of network traffic
    --ignore-engines            ignore engines check
    --ignore-scripts            
    --ignore-optional           
    --force                     
    --flat                      only allow one version of a package
    --prod, --production        
    --no-lockfile               don't read or generate a lockfile 

--flat で複数 jQuery のimport を弾いたりするのに良さそう。

--ignore-optional はまさに自分が欲しかったものという感じ。Qiitaでもつい最近まで npm-shrinkwrap を使っていたのですが、docker環境に移行した際、環境ごとに変わる optional dependencies をshrinkwrap に含んで異なるOSでnpm install に失敗し爆死するということを npm がしでかして、まったく使えなくなり、破棄しました。yarn ならうまくいきそう。

--prefer-offline が速い!

npm install はサーバーへの整合性確認とかで毎回サーバーにリクエストしてたけど、プロジェクトの起動の前に yarn install --prefer-offline とか書いとくと便利そうだった。

で、使うの

現時点でとくに問題点は感じず、わかりやすいメリットもあるが、もうちょい様子見してから考える

plaid
CXプラットフォーム「KARTE」の開発・運営、EC特化型メディア「Shopping Tribe」の企画・運営、CX特化型メディア「XD(クロスディー)」の企画・運営
https://plaid.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away