yarn2に移行してみる。
依存モジュール丸々コミットしてしまおうというZero-Installsが目玉。
移行作業
ここに書いてる通り
yarnバージョン設定
yarn set version berry
何やら追加された
"packageManager": "yarn@3.2.2"
.yarn/releases/yarn-3.2.2.cjs
.yarnrc.yml
.yarn/...
これらはCommitするものなのでCommitする。
node_modules使う場合は、nodeLinkerの設定を行う。
今回は飛ばす。
install
yarn install
なぜかnode_modulesができて
.yarnrc.ymlに
nodeLinker: node-modules
が追記された。
yarn.lockがあると互換性のためにnode-modulesができるようだ。
yarn.lockを消してやり直したらnode-modulesができなかった。
node_modulesがあること前提のモジュールがあるから互換性のために
node-modules残すということか。
node_modules見に行くのは開発ツール系だろうが、
概ね対応しているっぽい。
ツールの対応状況は以下
コミットするファイルを決める
install後、各種ファイルが追加された。
Zero-Installsを使うかによって、何をコミットするか決める。
今回はZero-Installsにするため、.gitignoreに以下追記。
.yarn/*
!.yarn/cache
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
さて、Zero-Installsにした場合、モジュールのファイルサイズが気になるところ。
以下パッケージがある場合でinstallでサイズ比較してみる。
"@types/react": "^18.0.15",
"@types/react-dom": "^18.0.6",
"@typescript-eslint/eslint-plugin": "^5.30.5",
"@typescript-eslint/parser": "^5.30.5",
"eslint": "^8.0.1",
"eslint-config-prettier": "^8.5.0",
"eslint-config-standard": "^17.0.0",
"eslint-plugin-import": "^2.25.2",
"eslint-plugin-n": "^15.0.0",
"eslint-plugin-promise": "^6.0.0",
"eslint-plugin-react": "^7.30.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"typescript": "^4.7.4"
Zero-Installsの場合
.yarn/cache
31.0 MB
ファイル数: 216
Zero-Installsなし
node_modules下
98.8 MB
ファイル数: 6,440
圧縮してるからファイル数激減は当然として、サイズは3割ぐらいか。
使用するモジュールが対応してればデメリットはない気がする。
エディタ設定
TypeScriptのコンパイルエラーが出ている。
VSCodeの設定を行う。
yarn dlx @yarnpkg/sdks vscode
何やら追加された
.vscode/extensions.json
.yarn/sdks/...
.vscode/settings.json
も追記されている。
TypeScriptやらEslint関連のファイルができてる。
VSCodeでワークスペースのTypeScriptバージョンを使用するように設定。
(.tsとか開いて下にTypeScriptと出てるところをクリックして選択できる)
これでコンパイルエラーがなくなる。
裏で何してるのかはよくわからないができた。
.yarn/sdks/
はCommit推奨。
.vscode/はなんか微妙だがコミットして運用しても良いかも。
なんか初期設定が色々あるのが微妙だが、
誰かがCommitしておけばクローンやブランチ切り替え後のinstallとかもないし、
CICDも早くなりそうなので、良さげ。