PowerShellでは認識するのに、git Bashでは認識しない
事象
開発中に、pnpmのコマンド使えなくなったので対策をまとめます。
開発環境:
- windows10
- corepack
- pnpm
- node18
PowerShellとは
- Windowsに標準搭載されているコマンドラインシェル
- cmdの後継で、基本的にcmdのコマンドをそのまま使える
- さらに管理や自動化に特化した強力な機能を持っている
bash
- Linuxで利用される代表的なシェル。
-
ls,mv,catなどのコマンドを使える
git bash
WindowsにGitをインストールすると使えるようになるシェル環境。
Linuxライクに ls や cat などが使える。
ただし PATHの扱いがPowerShellと異なる ため、Node.js関連のコマンドが動かないことがある。
修復方法
.bashrcに下記設定を追加
C:\Users<ユーザー名>.bashrc
PATHを通す
pnpm は corepack 経由で実行されます。
そのため Node.js の bin ディレクトリ を PATH に追加する必要があります。
.bashrc に以下を追記します。
# Node.js / pnpm 用 PATH
export PATH="$APPDATA/npm:$PATH"
shim(シム)とは
- 本体プログラムを直接実行せず、仲介するスクリプト/実行ファイル のこと
- 実際には C:\Users<ユーザー名>\AppData\Roaming\npm\pnpm.cmd という小さなファイル(シム)が呼ばれる
- このシムが corepack を呼び出し、正しい pnpm のバージョンを探して起動する
- 環境が変わった際にshimは再作成される
今回の原因
- 誤ったpathが指定されていた
- すでに壊れてシムを指定していたため、動かなかった
まとめ
- PowerShellでは動くのにGit Bashでは動かない原因はPATH
- .bashrc に $APPDATA/npm を追加することで解決!