🤔
nodenvでpnpmが使えなかったので使えるようにした話
前提
やったこととしてはタイトル通り
元々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