環境
- git for windows
- gitbash@version 4.4.23(2)-release (x86_64-pc-msys)
結論
.bashrc
を以下の様に変更する
※.git_profile
はgit for windows
が自動作成してくれる
+ # 環境変数の設定 LINUX書式のPATHに変換
+ export PATH=`cygpath -u $PATH`
参考
備忘録のようなメモ
Node.js
のバージョン管理fnm
を導入したのですが、公式ページの通りに導入後、パッケージをグローバルインストールし、gitbash
でコマンド実行するけどとどうも動かない。cmd
では動作する。
$ fnm --version
fnm 1.29.2
$ fnm list
* v14.19.1
* v16.14.2 default
* system
$ node -v
v16.14.2
$ npm -v
8.5.0
$ vue --version
node:internal/modules/cjs/loader:936
throw err;
^
Error: Cannot find module 'C:\Program Files\Git\Users\[user]\AppData\Local\Temp\fnm
_multishells\3352_1649399178057\node_modules\@vue\cli\bin\vue.js'
?[90m at Function.Module._resolveFilename (node:internal/modules/cjs/loader:9
33:15)?[39m
?[90m at Function.Module._load (node:internal/modules/cjs/loader:778:27)?[39m
?[90m at Function.executeUserEntryPoint [as runMain] (node:internal/modules/r
un_main:77:12)?[39m
?[90m at node:internal/main/run_main_module:17:47?[39m {
code: ?[32m'MODULE_NOT_FOUND'?[39m,
requireStack: []
}
C:\Users\[user]>vue --version
@vue/cli 5.0.4
gitbash
では何故かC:\Program Files\Git\
を見に行ってしまっている。git for windows
のインストール先の問題かとユーザーホームディレクトリである%HOMEPATH%
にインストールしても結果は同じ。
$ vue --version
node:internal/modules/cjs/loader:936
throw err;
^
Error: Cannot find module 'C:\Users\[user]\Git\Users\[user]\AppData\Local\Temp\fnm
_multishells\3352_1649399178057\node_modules\@vue\cli\bin\vue.js'
?[90m at Function.Module._resolveFilename (node:internal/modules/cjs/loader:9
33:15)?[39m
?[90m at Function.Module._load (node:internal/modules/cjs/loader:778:27)?[39m
?[90m at Function.executeUserEntryPoint [as runMain] (node:internal/modules/r
un_main:77:12)?[39m
?[90m at node:internal/main/run_main_module:17:47?[39m {
code: ?[32m'MODULE_NOT_FOUND'?[39m,
requireStack: []
}
一通りインターネットの海を調べてみたが、どうも同様の事象自体が表立ってないみたい。諦めようかな。
最後の悪あがき程度に、開発者よろしくvue
のデバッグを試みる。
まずは、fnm
がどのnode
モジュールを使っているか探す。fnm env
で大体わかる。
$ fnm env
export PATH="C:\\Users\\[user]\\AppData\\Local\\Temp\\fnm_multishells\\75112_1649
400296857":$PATH
export FNM_MULTISHELL_PATH="C:\\Users\\[user]\\AppData\\Local\\Temp\\fnm_multishe
lls\\75112_1649400296857"
export FNM_VERSION_FILE_STRATEGY="local"
export FNM_DIR="C:\\Users\\[user]\\AppData\\Roaming\\fnm"
export FNM_LOGLEVEL="info"
export FNM_NODE_DIST_MIRROR="https://nodejs.org/dist"
export FNM_ARCH="x64"
FNM_MULTISHELL_PATH
が示すディレクトリC:\\Users\\[user]\\AppData\\Local\\Temp\\fnm_multishells\\75112_1649400296857
内にvue
があるか探す。ビンゴ。
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/node_modules/@vue/cli/bin/vue.js" "$@"
else
exec node "$basedir/node_modules/@vue/cli/bin/vue.js" "$@"
fi
ぱっと見で変数basedir
が変な値を参照しているのは明確なので、参照元であろう$0
の値をコンソールに出力。
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+ echo $0
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/node_modules/@vue/cli/bin/vue.js" "$@"
else
exec node "$basedir/node_modules/@vue/cli/bin/vue.js" "$@"
fi
vue --version
を実行
$ vue --version
\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857/vue
node:internal/modules/cjs/loader:936
throw err;
^
\Users\[user]\AppData
、相対パスみたいなパスでコマンドが実行されている。c:\
が無い。shell script自体、Windows上で実行される事を想定してないだろうからそりゃそうなるわなぁ(諦めモード
では次に、このWindows書式のパスであろう$0
をcygpath -w [path]
でWindows書式に使用としている。意味なくね?デバッグ。
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+ echo $0
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
esac
+ echo $basedir
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/node_modules/@vue/cli/bin/vue.js" "$@"
else
exec node "$basedir/node_modules/@vue/cli/bin/vue.js" "$@"
fi
vue --version
を実行
$ vue --version
\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857/vue
C:\Program Files\Git\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857
node:internal/modules/cjs/loader:936
throw err;
^
C:\Program Files\Git\Users\[user]\AppData
。見たことあるパスがでてきた。
shell script
は門外漢で詳しく無いので、推測でしかないが、uname
がユーザーエージェントであると仮定して、該当のscriptは「ユーザーエージェントに*CYGWIN*|*MINGW*|*MSYS*
が含まれる時、Windows上でエミュレート実行されていると想定し、UNIX書式→Windows書式に変換する」と読める。
では、コマンド実行される際のパスがUNIX書式になれば良いのではないか。と更に仮定してみる。さぁ、どこで指定されているのか。frm env
だ。frm env
はshellを吐き出すが、そのパスがWindows書式のパスだった。それをUNIX書式に変えてやれば良いのではないか。
$ fnm env
export PATH="C:\\Users\\[user]\\AppData\\Local\\Temp\\fnm_multishells\\75112_1649
400296857":$PATH
export FNM_MULTISHELL_PATH="C:\\Users\\[user]\\AppData\\Local\\Temp\\fnm_multishe
lls\\75112_1649400296857"
export FNM_VERSION_FILE_STRATEGY="local"
export FNM_DIR="C:\\Users\\[user]\\AppData\\Roaming\\fnm"
export FNM_LOGLEVEL="info"
export FNM_NODE_DIST_MIRROR="https://nodejs.org/dist"
export FNM_ARCH="x64"
frm env
を実行されると、環境変数$PATH
には、Windows書式とUNIX書式のパスが混在している。
eval "$(fnm env --use-on-cd)"
$ echo $PATH
C:\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857:/c/Users/
[users]/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/usr/bin:/mingw64/bin:/usr/bin:/c/
Users/[users]/bin:/c/Program Files (x86)/Intel/iCLS Client:/c/Program Files/Intel/
iCLS Client:/c/WINDOWS/system32:/c/WINDOWS:/c/WINDOWS/System32/Wbem:/c/WINDOWS/S
ystem32/WindowsPowerShell/v1.0:/c/Program Files (x86)/Intel/Intel(R) Management
Engine Components/DAL:/c/Program Files/Intel/Intel(R) Management Engine Componen
ts/DAL:/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/IPT:/c
/Program Files/Intel/Intel(R) Management Engine Components/IPT:/c/Program Files/
Intel/WiFi/bin:/c/Program Files/Common Files/Intel/WirelessCommon:/c/WINDOWS/Sys
tem32/OpenSSH:/c/Program Files/Microsoft SQL Server/Client SDK/ODBC/110/Tools/Bi
nn:/c/Program Files (x86)/Microsoft SQL Server/120/Tools/Binn:/c/Program Files/M
icrosoft SQL Server/120/Tools/Binn:/c/Program Files/Microsoft SQL Server/120/DTS
/Binn:/c/Program Files (x86)/Microsoft SQL Server/120/Tools/Binn/ManagementStudi
o:/c/Program Files (x86)/Microsoft SQL Server/120/DTS/Binn:/c/Program Files (x86
)/Google/Cloud SDK/google-cloud-sdk/bin:/c/Program Files/Microsoft VS Code/bin:/
c/java/jdk-15.0.1/bin:/c/ProgramData/chocolatey/bin:/c/Program Files (x86)/Power
Shell/7:/cmd:/c/Users/[users]/AppData/Local/Microsoft/WindowsApps:/c/Users/[users]/A
ppData/Local/GitHubDesktop/bin:/c/Users/[users]/AppData/Local/Microsoft/WindowsApp
s:/usr/bin/vendor_perl:/usr/bin/core_perl
じゃぁ、Windows書式→UNIX書式に変えてみる。
eval "$(fnm env --use-on-cd)"
+ # Convert and set Windows environment variables to LINUX-style PATH.
+ export PATH=`cygpath -u $PATH`
$ echo $PATH
/tmp/fnm_multishells/75112_1649400296857:/c/Users/[user]/bin:/mingw64/bin:/usr/loc
al/bin:/usr/bin:/usr/bin:/mingw64/bin:/usr/bin:/c/Users/[user]/bin:/c/Program Fil
es (x86)/Intel/iCLS Client:/c/Program Files/Intel/iCLS Client:/c/WINDOWS/system3
2:/c/WINDOWS:/c/WINDOWS/System32/Wbem:/c/WINDOWS/System32/WindowsPowerShell/v1.0
:/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/DAL:/c/Progr
am Files/Intel/Intel(R) Management Engine Components/DAL:/c/Program Files (x86)/
Intel/Intel(R) Management Engine Components/IPT:/c/Program Files/Intel/Intel(R)
Management Engine Components/IPT:/c/Program Files/Intel/WiFi/bin:/c/Program File
s/Common Files/Intel/WirelessCommon:/c/WINDOWS/System32/OpenSSH:/c/Program Files
/Microsoft SQL Server/Client SDK/ODBC/110/Tools/Binn:/c/Program Files (x86)/Micr
osoft SQL Server/120/Tools/Binn:/c/Program Files/Microsoft SQL Server/120/Tools/
Binn:/c/Program Files/Microsoft SQL Server/120/DTS/Binn:/c/Program Files (x86)/M
icrosoft SQL Server/120/Tools/Binn/ManagementStudio:/c/Program Files (x86)/Micro
soft SQL Server/120/DTS/Binn:/c/Program Files (x86)/Google/Cloud SDK/google-clou
d-sdk/bin:/c/Program Files/Microsoft VS Code/bin:/c/java/jdk-15.0.1/bin:/c/Progr
amData/chocolatey/bin:/c/Program Files (x86)/PowerShell/7:/cmd:/c/Users/[user]/Ap
pData/Local/Microsoft/WindowsApps:/c/Users/[user]/AppData/Local/GitHubDesktop/bin
:/c/Users/[user]/AppData/Local/Microsoft/WindowsApps:/usr/bin/vendor_perl:/usr/bi
n/core_perl
C:\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857
↓
/tmp/fnm_multishells/75112_1649400296857
おお・・・。ぽい。。。
$ vue --version
/tmp/fnm_multishells/75112_1649400296857/vue
C:\Users\[user]\AppData\Local\Temp\fnm_multishells\75112_1649400296857
@vue/cli 5.0.4
おお・・・。綺麗に変換された。うえに動いた。
スッキリ
了