GlobalインストールしたnpmパッケージにPATHを通す方法

2023.02.01

こんにちは、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コマンドを使う方法の方がオススメです。

参考

以上