戦えプログラマン

いつだって戦いなのだ

Git Bash が node_modules を見つけられない問題

前提

  • node は coreybutler/nvm-windows でインストールした
  • npm install -g npx 済である
  • Git Bashnpx -v してみるとエラーが出る
  • Win標準のコマンドプロンプトではエラーが出ない

もちろんWin標準のコマンドプロンプトは使いたくないものとする。

発生したエラー

$ node -v
v10.7.0

$ npx -v
internal/modules/cjs/loader.js:583
    throw err;
    ^

Error: Cannot find module 'C:\Program Files\Git\node_modules\npx\index.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
    at Function.Module._load (internal/modules/cjs/loader.js:507:25)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at startup (internal/bootstrap/node.js:266:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:596:3)

対処

ないと言われている C:\Program Files\Git\node_modulesシンボリックリンクを張ってやる

  1. 管理者権限でコマンドプロンプトを起動する
  2. node のインストール場所を確認
  3. mklink
C:\Windows\system32>where node
X:\dev\nvm-suites\nodejs\node.exe

C:\Windows\system32>cd C:\Program Files\Git

C:\Program Files\Git>mklink /D node_modules X:\dev\nvm-suites\nodejs\node_modules
node_modules <<===>> X:\dev\nvm-suites\nodejs\node_modules のシンボリック リンクが作成されました

確認

$ npx -v
10.2.0

参考記事

https://github.com/yeoman/generator-webapp/issues/530#issuecomment-245902756

根本解決になってなくやや気持ち悪い。
なぜ C:\Program Files\Git\node_modules を最初に探しにいってしまうのか不明だが、
nvm でバージョン変えても動作しそうだし(シンボリックリンク先もnvmが作るシンボリックリンクなので)
まぁ動けば不満ないし、
これでいいやという気持ち。