corepack で yarn を入れてみた
◆ corepack enable yarn で yarn が使えるようになる
◆ Windows だと管理者権限ないとエラーになることも
◆ corepack prepare yarn@3.1.1 のようにしてバージョン指定でインストールできる
◆ corepack prepare で --activate つけると切り替わる
◆ インストール先はユーザのホームディレクトリの .node/corepack フォルダ内
◆ Windows だと管理者権限ないとエラーになることも
◆ corepack prepare yarn@3.1.1 のようにしてバージョン指定でインストールできる
◆ corepack prepare で --activate つけると切り替わる
◆ インストール先はユーザのホームディレクトリの .node/corepack フォルダ内
以前試そうとしたときは corepack が Node.js 16 に入ってなかったですが LTS の 16 では入ってるようでした
ちょうど yarn が入ってない環境だったので corepack でインストールを試してみました
環境は Windows で Nodist とかを使わず標準のインストーラでインストールした Node.js です
よく見るとインストールのときのオプションで corepack をインストールするか選べました
デフォルトでは npm と同様にインストールするようになってます
で機能を確認できますが できることはそれほど多くなさそうです
を実行すると yarn が使えるようになります
「Error: EPERM: operation not permitted」 みたいなエラーが出る場合は管理者権限で実行すれば動きました
yarn.cmd や yarn.ps1 を Program Files フォルダの中に書き込もうとして権限不足になってるような感じでした
管理者権限が使えない場合は --install-directory オプションでフォルダを指定するとそこに yarn.cmd などのファイルが作られるのでパスが通ってるフォルダを指定すればよさそうです
これを実行すると
にある .js ファイルを実行します
このフォルダには yarn 以外に npm や npx などの .js ファイルがあり どれも
という感じで 同じフォルダの corepack.js を呼び出しています
corepack.js の中を見ると webpack で生成されたファイルで yarn や npm というワードが多数あったので 全部のパッケージマネージャのコードがこの .js ファイルにまとまってる?とも思いましたが それにしては 500KB くらいしかないのでそんなことはなさそうです
探してみると ユーザのホームディレクトリに .node フォルダが作られていて その中に corepack フォルダがあり そこに yarn などの本体が保存されているようです
パッケージマネージャのフォルダの中に各バージョンのフォルダがあります
この corepack フォルダには lastKnownGood.json というファイルがあってここに現在有効なバージョン情報が保存されているようです
設定の保持方法からしてグローバル設定みたいなので フォルダ(プロジェクト)ごとに別のバージョンを設定するみたいな機能はないようです
yarn@3.1.1 みたいにバージョンを指定して --activate をつけます
--activate なしだとダウンロードするだけで切り替わりません
ダウンロード先は上に書いた .node/corepack の中です
ネットにつながらない環境用の機能もありました
prepare に -o オプションをつけると カレントディレクトリに corepack.tgz ファイルが作られます(名前は引数で変更可)
このファイルを hydrate サブコマンドの引数に指定することで 事前にダウンロードしておいた tgz ファイルを使って yarn などをインストールできるようです
corepack で yarn を enable するとデフォルトでは 1 系になります
yarn の場合 1 系がグローバルインストールのコマンド用で 2 以降はプロジェクトにインストールするものという扱いだったので 2 や 3 を指定する必要はないのかもです
ちょうど yarn が入ってない環境だったので corepack でインストールを試してみました
環境は Windows で Nodist とかを使わず標準のインストーラでインストールした Node.js です
よく見るとインストールのときのオプションで corepack をインストールするか選べました
デフォルトでは npm と同様にインストールするようになってます
yarn を使えるように
Node.js をインストールしてればパスは通っているので corepack コマンドが使えますcorepack --help
で機能を確認できますが できることはそれほど多くなさそうです
corepack enable yarn
を実行すると yarn が使えるようになります
「Error: EPERM: operation not permitted」 みたいなエラーが出る場合は管理者権限で実行すれば動きました
yarn.cmd や yarn.ps1 を Program Files フォルダの中に書き込もうとして権限不足になってるような感じでした
管理者権限が使えない場合は --install-directory オプションでフォルダを指定するとそこに yarn.cmd などのファイルが作られるのでパスが通ってるフォルダを指定すればよさそうです
内部的には
yarn コマンドが使えるようになりましたが 呼び出しているコマンドはここでしたC:\Program Files\nodejs\yarn.cmd
これを実行すると
C:\Program Files\nodejs\node_modules\corepack\dist\yarn.js
にある .js ファイルを実行します
このフォルダには yarn 以外に npm や npx などの .js ファイルがあり どれも
#!/usr/bin/env node
require('./corepack').runMain(['yarn', ...process.argv.slice(2)]);
という感じで 同じフォルダの corepack.js を呼び出しています
corepack.js の中を見ると webpack で生成されたファイルで yarn や npm というワードが多数あったので 全部のパッケージマネージャのコードがこの .js ファイルにまとまってる?とも思いましたが それにしては 500KB くらいしかないのでそんなことはなさそうです
探してみると ユーザのホームディレクトリに .node フォルダが作られていて その中に corepack フォルダがあり そこに yarn などの本体が保存されているようです
パッケージマネージャのフォルダの中に各バージョンのフォルダがあります
C:\Users\USERNAME\.node\corepack\yarn\1.22.15
C:\Users\USERNAME\.node\corepack\yarn\2.2.2
C:\Users\USERNAME\.node\corepack\yarn\3.1.1
この corepack フォルダには lastKnownGood.json というファイルがあってここに現在有効なバージョン情報が保存されているようです
{
"yarn": "3.1.1"
}
設定の保持方法からしてグローバル設定みたいなので フォルダ(プロジェクト)ごとに別のバージョンを設定するみたいな機能はないようです
バージョン切り替え
バージョンは prepare サブコマンドで切り替えできますcorepack prepare yarn@3.1.1 --activate
yarn@3.1.1 みたいにバージョンを指定して --activate をつけます
--activate なしだとダウンロードするだけで切り替わりません
ダウンロード先は上に書いた .node/corepack の中です
ネットにつながらない環境用の機能もありました
prepare に -o オプションをつけると カレントディレクトリに corepack.tgz ファイルが作られます(名前は引数で変更可)
このファイルを hydrate サブコマンドの引数に指定することで 事前にダウンロードしておいた tgz ファイルを使って yarn などをインストールできるようです
corepack で yarn を enable するとデフォルトでは 1 系になります
yarn の場合 1 系がグローバルインストールのコマンド用で 2 以降はプロジェクトにインストールするものという扱いだったので 2 や 3 を指定する必要はないのかもです