背景
Yarnにはバージョン1とバージョン2(Berry)がありnode_modulesの肥大化を解決している模様。
キャッシュも利用していて、キャッシュが効く場合にはインストールもそれなりに速いらしいです。
効かない場合はむしろ依存関係の問題?でv1の方が10倍くらい速いときもある、謎
バージョン確認
yarn -v1.22.19とするとバージョンが分かります。
バージョン更新
yarn set version berryを実行すると同一ディレクトリ配下に、
.yarn/.yarnrc.yml
が作成されます。再度バージョンを確認すると、
yarn -v4.0.2と何故かバージョンが4に上がりました。
2とは一体?
このままだと余計なファイルがgitの管理に入ってしまうので、.gitignoreに
# yarn v2.yarn/cache.yarn/unplugged.yarn/build-state.yml.yarn/install-state.gz.pnp.*を追加しておきます。
この状態で終わらせてもいいのですが、nodeやts-nodeを実行したときにnode_modulesを探しにいくので実行エラーが発生してしまいます。
これはv2ではnode_modulesが生成されないためなのですが、これに対処するために.yarnrc.ymlに以下の内容を追記します。
nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-4.0.2.cjsnode_modulesじゃなくてnode-modulesであることがポイントです。なんでハイフンなのかは謎です。これをやるとyarn install時にnode_modulesが作成されるようになり、v1のときに比べてサイズ自体はものすごく小さいのですがこれ自体をgit管理する意味はないので引き続き.gitignoreで除外設定はしておきましょう。
これでVSCodeなりでこのディレクトリを開くとバージョンが自動的に切り替わるようになりました。
devonly: ~ $ yarn -v1.22.19 # このYarn自体はbrew install yarnでインストールしましたdevonly: ~ $ cd Developer/ios-app-decryptordevonly: ~/Developer/ios-app-decryptor (docs *%=)$ yarn -v4.0.2上のようにホームディレクトリでは1.22.19だったバージョンがディレクトリを移動するだけでv2が利用できているのがわかります。
v2にない機能
v2ではv1にはあった機能のいくつかがないのでプラグインで対応します。
upgrade-interactive
例えばupgrade-interactiveは対話的にバージョン管理が行える便利なコマンドでしたが、v2だとそのまま実装されてはないので、
yarn plugin import interactive-toolsとして追加します。
プロダクションビルド
Dockerなどでyarn installを実行するときに開発環境用のモジュールは追加したくないので、
yarn --production --ignore-scripts --prefer-offlineというコマンドがありましたが、v2ではこれはありません。
yarn plugin import workspace-toolsyarn workspaces focus --all --productionその場合、上のコマンドで代用可能なのでこちらを利用しましょう。
GitHub Actions
GitHub ActionsでSSGをビルドする際にデフォルトではyarnが入っていなかったのでnpm install -g yarnでわざわざインストールしていたのですが、これをnpm install -g yarn@2と変更します。
これでv2がインストールされるので、最終的に以下のようになります。
jobs: publish: runs-on: ubuntu-20.04 permissions: contents: read deployments: write steps: - name: Checkout uses: actions/checkout@v3
- name: Install Yarn run: npm install -g yarn@2 # ここを変更
- name: Cache CDK Dependencies uses: actions/cache@v3 id: cache_cdk_dependency_id env: cache-name: cache-cdk-dependency with: path: .yarn/cache # node_modulesに代えて.yarn/cacheをキャッシュする key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('yarn.lock') }} restore-keys: ${{ runner.os }}-build-${{ env.cache-name }}-
- name: Install Dependencies if: ${{ steps.cache_cdk_dependency_id.outputs.cache-hit != 'true' }} run: yarn --immutable --immutable-cache記事は以上。