🙆
やや乱暴にyarnからnpmに移行する方法
概要
先日、以下のようなエラーに遭遇した。
この問題の解決策として、自分はyarnからnpmへ移行するという方法を採用した。公式のパッケージマネージャの方が比較的に安定していて(願望)、長期的に見れば保守コストがかからないのではないか、と考えたためである。上記のエラー以外にも月に1回程度のペースでyarnに関連するエラーに遭遇していて、気持ち的にしんどくなっていたのも移行の理由として大きい。npmもv5以降は機能・性能ともに向上しているため、yarnからnpmへの逆流現象は今後増えていくのではないかと思い、後進のために備忘録を残すことにした。
手順
1. yarn.lockを矛盾無くpackage-lock.jsonに変換
そんな器用なことはできなかった。
自分の実力ではyarn.lockを矛盾無くpackage-lock.jsonに変換するなんてことはできなかった。
そこで非常に乱暴なやり方ではあるが、バージョンのズレが生じることは許容して、その後にデグレを潰すことに注力することにした。
具体的には、
- yarn.lockと/node_modulesを削除
-
npm install
を実行 - デグレを潰す
という手順を踏んだ。
もしyarn.lockを矛盾無くpackage-lock.jsonに変換する方法があれば、コメントなどで教えていただきたい。
2. yarnとpnpmを禁止する
ルールが変更された瞬間はヒューマンエラーが起こりがちなので、システム側でヒューマンエラーの発生を抑制する。package.jsonに以下のような記述をすることで、yarnとpnpmの利用を禁止できる。
package.json
{
(...略...)
"engines": {
"node": "20.x",
"npm": "10.x",
"yarn": "Please use npm.",
"pnpm": "Please use npm."
},
(...略...)
3. コマンドを置き換える
CIやREADME.mdやシェルスクリプト等々に書かれているyarnコマンドをnpmコマンドに置き換える。
インストール
yarn
or yarn install
-> npm ci
ユーザー定義スクリプト
yarn <script>
or yarn run <script>
-> npm run <script>
ローカルCLI
yarn <command>
-> npx <command>
感想
手順1で乱暴なことをしているのが心残りだ…。
手順1で時間をかけてデグレを潰すという作業が入ってくるので、プロジェクトの規模が一定以上の場合、この記事の方法は参考にならないだろう。
Discussion