2024年版 Voltaからpnpmを使用する。
概要
当初Node.jsをインストールした時に付随されているcorepackを利用して、pnpmを使用と考えていましたが、うまく動かないことがあった。そこでVoltaを利用してcorepackをインストールし直してpnpmを使用するという手順を紹介する。
環境
- client OS : Windows 10 Home
- Volta : 1.1.1
- pnpm : 9.1.2
- Node.js : 22.9.0
- corepack : 0.12.1
割愛
- Node.jsのインストールについて
corepackについて
こちらについてはGithubのREADMDを引用。
Corepack は、Node.js プロジェクトと、開発中に使用するパッケージ マネージャーとの間の橋渡しとして機能する、実行時依存性のない Node.js スクリプトです。実際的には、Corepack を使用すると、Yarn、npm、pnpm をインストールせずに使用できます。
上記からnpm,yarnなどのパッケージマネージャーを管理してくれるツール。パッケージマネージャーのマネージャーと少しややこしく感じる。
つまずき[既存のNode.jsのcorepackを使ってpnpm導入]
はじめは公式を参考にして下記の工程に従ってpnpmを導入を実施。
- コマンドラインツールでNode.js v20以降がインストール済であることを確認する。
$ node -v
返値
v22.9.0
- 管理者権限でコマンドラインツールを開いて、corepackを用いてpnpmを有効化。
$ corepack enable pnpm
corepackは既にコマンドラインで使用可能であると思うので、特にコマンドラインに返値は表示されまない。
- プロジェクトのpackage.jsonがある場所で下記のコマンドを叩く
$ corepack use pnpm@latest
でとりあえず終わりな筈だが、
以下のエラーが返値で出力される。
ERROR: This version of pnpm requires at least Node.js v18.12
The current version of Node.js is v16.12
Visit https://r.pnpm.io/comp to see the list of past pnpm versions with respective Node.js version support.
ステップ1の段階でNodeのバージョンは22.9.0
なのでこのエラーは変。
この部分について同様の事象があることが確認できた。
voltaでnodeのバージョンを管理しているのが原因?と思いつつ
Windowsの場合はスタート画面から「システム環境変数の編集」で登録できる。
VOLTA_FEATURE_PNPM=1
結論この動作を行ってみてもうまく動かなかった。そのため違う手段でpnpmを導入していくことにする。
あとあとに調べるとcorepack use
のコマンド自体corepackの0.20
から導入されているとのこと。
既存のNode.jsのcorepack => Voltaからcorepackをインストールしてpnpmを使用する。
既存のNodejsにあるcorepackを使用すると、うまくいかないため、Voltaを使用してcorepackをインストールして、インストールしたcorepackからpnpmを有効化していく流れにする。
- Voltaをインストールしておく。
$ volta -v
- 既存のpnpmがある場合、事前にアンインストールしておく。
$ volta uninstall pnpm
- 既存のcorepackが入っている状態は変わらないため一応既存のcorepackで有効化したpnpmを無効化しておく。(本来corepackが2つある状態になるため、この操作で確かかは調査中)[とりあえず問題なく動きはした]
$ corepack disable pnpm
- voltaを使ってcorepackをインストール。
$ volta install corepack
- corepackを使ってpnpmを有効化。
$ corepack enable pnpm
- pnpmをインストールする。
$ pnpm -v
Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-8.15.3.tgz.
Do you want to continue? [Y/n]
インストールが完了するとpnpmコマンドが使えるようになりました。
ちなみにですが、corepackは今後Node.jsから削除されるとのこと。これはまたもやパッケージマネージャー論争が起こるのでは。。。
引用元
Discussion