なぜ npm の global install に sudo が必要だったりしなかったりするのか


モチベーション

  • npm install -g hoge のように npm で global install を行う際に sudo が必要な場合がある
  • 環境によっては不要な場合もあり、 sudo で install して環境がごちゃごちゃになった経験もあり、気になったので調べたメモ

なぜか

  • npm の global install 先として sudo が必要なディレクトリが設定されているため
  • 以下の記事が大変参考になった

きちんとわかる、npm install | 第1回 PCにコマンドをインストールする
https://www.codegrid.net/articles/2020-npm-install-1/

  • mac における npm の global install 先はデフォルトで /usr/local になっており、これは sudo が必要なディレクトリになっている
  • そのため mac で何も考えず global install しようとすると sudo が必要になってしまう
  • npm config get prefix コマンドで global install 先を確認することが出来る
  • npm config set prefix=$HOME/.npm_global のようなコマンドで global install 先を設定することも出来るので sudo が不要なディレクトリを用意してやると良い
  • 公式ドキュメントは以下

config | npm Docs
https://docs.npmjs.com/cli/v8/using-npm/config#prefix

prefix

  • Default: In global mode, the folder where the node executable is installed. In local mode, the nearest parent folder containing either a package.json file or a node_modules folder.
  • Type: Path

The location to install global items. If set on the command line, then it forces non-global commands to run in the specified folder.