🤔

nodenvでpnpmが使えなかったので使えるようにした話

2024/07/02に公開

前提

やったこととしてはタイトル通り
元々nodebrewでnodeのバージョン管理を行っていたが、新しいプロジェクトではモノレポでパッケージごとにnodeのバージョンが違い、そこではnodenvを使用していたのでnodebrewからnodenvに乗り換えました
が、pnpmを使用しているプロジェクトでnpm install -g pnpmをしてpnpm -vコマンドをしてもzsh: command not found: pnpmとエラーになり、それを解決したので他の人が参考になればと記事を書きました

環境

  • macbook Pro M1 14インチ
  • nodenv 1.5.0+49.a008938
    • anyenvを使用してインストール
  • node v21.7.3

解決策

結論、以下のファイルを作成しました

/Users/<ユーザー名>/.anyenv/envs/nodenv/shims/pnpm
#!/usr/bin/env bash
set -e
[ -n "$NODENV_DEBUG" ] && set -x

program="${0##*/}"
if [ "$program" = "node" ]; then
  for arg; do
    case "$arg" in
    -e* | -- ) break ;;
    */* )
      if [ -f "$arg" ]; then
        export NODENV_DIR="${arg%/*}"
        break
      fi
      ;;
    esac
  done
fi

export NODENV_ROOT="/Users/hotta6163/.anyenv/envs/nodenv"
exec "/Users/hotta6163/.anyenv/envs/nodenv/bin/nodenv" exec "$program" "$@"

yarnは使えてpnpmは使えないという状況でしたので、一旦where yarnでyarnの本体を確認
すると、/Users/<ユーザー名>/.anyenv/envs/nodenv/shims/yarnという実行ファイルがあり、それが実行されてるぽかったです
で、/Users/<ユーザー名>/.anyenv/envs/nodenv/shimsに存在するファイルを確認すると、npmやyarnはあるが、pnpmはない、、、、

npmとyarnの実行ファイルの中身が一緒だったので、「pnpmで同じ内容を実行すればいけるんちゃう?」という説で試してみるといけました!!

追記

正直正規の方法ではない気がしてます
もし正規の方法を知っている方がいれば教えて欲しいです!!

Discussion