🅿️

2024年版 Voltaからpnpmを使用する。

2024/10/05に公開

概要

当初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 をインストールせずに使用できます。

https://github.com/nodejs/corepack

上記からnpm,yarnなどのパッケージマネージャーを管理してくれるツール。パッケージマネージャーのマネージャーと少しややこしく感じる。

つまずき[既存のNode.jsのcorepackを使ってpnpm導入]

はじめは公式を参考にして下記の工程に従ってpnpmを導入を実施。
https://pnpm.io/ja/installation#corepack-を使用する

  1. コマンドラインツールでNode.js v20以降がインストール済であることを確認する。
$ node -v

返値

v22.9.0
  1. 管理者権限でコマンドラインツールを開いて、corepackを用いてpnpmを有効化。
$ corepack enable pnpm

corepackは既にコマンドラインで使用可能であると思うので、特にコマンドラインに返値は表示されまない。

  1. プロジェクトの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なのでこのエラーは変。

この部分について同様の事象があることが確認できた。
https://github.com/volta-cli/volta/issues/1743

voltaでnodeのバージョンを管理しているのが原因?と思いつつ

https://docs.volta.sh/advanced/pnpm
上記に倣って環境変数を登録する。
Windowsの場合はスタート画面から「システム環境変数の編集」で登録できる。

VOLTA_FEATURE_PNPM=1

結論この動作を行ってみてもうまく動かなかった。そのため違う手段でpnpmを導入していくことにする。

あとあとに調べるとcorepack useのコマンド自体corepackの0.20から導入されているとのこと。
https://github.com/nodejs/corepack/pull/291

既存のNode.jsのcorepack => Voltaからcorepackをインストールしてpnpmを使用する。

既存のNodejsにあるcorepackを使用すると、うまくいかないため、Voltaを使用してcorepackをインストールして、インストールしたcorepackからpnpmを有効化していく流れにする。

  1. Voltaをインストールしておく。
$ volta -v
  1. 既存のpnpmがある場合、事前にアンインストールしておく。
$ volta uninstall pnpm
  1. 既存のcorepackが入っている状態は変わらないため一応既存のcorepackで有効化したpnpmを無効化しておく。(本来corepackが2つある状態になるため、この操作で確かかは調査中)[とりあえず問題なく動きはした]
$ corepack disable pnpm
  1. voltaを使ってcorepackをインストール。
$ volta install corepack
  1. corepackを使ってpnpmを有効化。
$ corepack enable pnpm
  1. 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から削除されるとのこと。これはまたもやパッケージマネージャー論争が起こるのでは。。。

引用元

https://docs.volta.sh/advanced/pnpm
https://github.com/volta-cli/volta/issues/1743
https://zenn.dev/longrun_jp/articles/volta-node-corepack-pnpm
https://ramble.impl.co.jp/7564/
https://github.com/nodejs/corepack
https://github.com/nodejs/corepack/pull/291
https://zenn.dev/monicle/articles/b7a9314f9f1efb
https://zenn.dev/teppeis/articles/2021-05-corepack
https://qiita.com/oekazuma/items/1e2ee304877efa48c122

Discussion