こんにちは、CX事業本部 Delivery部の若槻です。
今回は、GlobalインストールしたnpmパッケージにPATHを通す方法を共有します。
結論
次のコマンドを実行するだけです。
export PATH=$PATH:`npm prefix --location=global`/bin
.zshrc
に記述する場合は次のように実行します。
echo "export PATH=$PATH:`npm prefix --location=global`/bin" >> ~/.zshrc
環境
M1 MacBookローカル環境で確認をしました。
$ node --version
v16.16.0
$ npm --version
8.11.0
$ sw_vers
ProductName: macOS
ProductVersion: 12.6
BuildVersion: 21G115
解説
npmの実行可能ファイルが配置される場所はnpm bin
コマンドで確認可能です。
$ npm bin -g
npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.
/Users/wakatsuki.ryuta/.npm-global/bin
Globalインストールされるパッケージの実体が配置される場所は{prefix}/lib/node_modules
ですが、実行可能ファイル(bin files)は{prefix}/bin
にリンクされます。
Operates in "global" mode, so that packages are installed into the prefix folder instead of the current working directory. See folders for more on the differences in behavior.
- packages are installed into the {prefix}/lib/node_modules folder, instead of the current working directory.
- bin files are linked to {prefix}/bin
{prefix}
の場所はnpm prefix
またはnpm config list
コマンドで確認可能です。
$ npm prefix --location=global
/Users/wakatsuki.ryuta/.npm-global
$ npm config list --location=global
; "user" config from /Users/wakatsuki.ryuta/.npmrc
prefix = "/Users/wakatsuki.ryuta/.npm-global"
; "cli" config from command line options
location = "global"
; node bin location = /usr/local/bin/node
; node version = v16.16.0
; npm local prefix = /Users/wakatsuki.ryuta/projects/cm-rwakatsuki/flutter_sample_app
; npm version = 8.11.0
; cwd = /Users/wakatsuki.ryuta/projects/cm-rwakatsuki/flutter_sample_app
; HOME = /Users/wakatsuki.ryuta
; Run `npm config ls -l` to show all defaults.
既定では{prefix}
は$HOME/.npm-global
となります。
よって冒頭で示した次のコマンドを実行すれば、PATHに{prefix}/bin
が追加されてglobalインストールされたnpmパッケージが実行可能となります。
export PATH=$PATH:`npm prefix --location=global`/bin
ちなみにnpm bin
コマンドの実行結果をPATHに通しても同様のことができますが、デメリットとして実行時にPATHがまだ通っていない場合はWARNINGが出力されてしまいます。
$ export PATH=$PATH:`npm bin --location=global`
npm ERR! bin (not in PATH env variable)
そのため~/.zshrc
などに上記コマンドを記述すると、ターミナル起動のたびにWARNINGが出力されるのが少し煩わしくなります。なので前述のnpm prefix
コマンドを使う方法の方がオススメです。
参考
以上