【Mac OS】npm install -gで権限エラーが出てからzshの環境変数PATH周りとか苦戦したので対処法まとめ

2021-06-06
Main Image

目次

こんにちは。

とあるチュートリアルでnpm install -gを実行したらエラーが出て、結局使えるようになるまでかなり苦戦したので対処法をまとめておきます。

問題の実行コマンド

$ npm install -g hogehoge

-gオプションはグローバルインストールを意味します。

エラー内容 permission denied

Error: EACCES: permission denied

...

The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user

何やらアクセスの権限がないところを弄ろうとしているみたい。

npm install -gはローカル(つまりプロジェクトフォルダ内)ではなく、グローバルにアクセスできるところにインストールするので問題が起きているようです。

しかし、npmとしては管理者権限実行であるsudoコマンドを使うことは推奨していないとのこと。(npm sudoでググるとそれっぽい内容が出てきます)

npmのグローバルインストール先を変更する

npm install -gのインストール先を、ユーザがアクセスできるホームディレクトリ内に変更します。

まずは現在の設定を確認してみます

$ npm config get prefix
/usr/local

なるほど、この場所の中を弄る権利がなかったんですね。

まずはホームディレクトリに設定ファイルを作ります。

$ cd ~
$ vi .npmrc

以下のターミナルコマンドでインストール先を.npm_globalに変更します。

$ npm config set prefix=$HOME/.npm_global

$HOMEはホームディレクトリのパスで、多分/Users/(名前)/みたいな感じです。$ echo $HOMEで確認できます。

ディレクトリも忘れず作ってあげましょう。

$ mkdir .npm_global

これでインストールできるか...と思ったら、今度はlibがないと怒られました。

libディレクトリも中に作ってあげます。

$ cd .npm_global
$ mkdir lib

これでようやく無事にnpm install -gが通りました。

インストールできたがコマンドがNot foundで使えない

さて、無事にインストールできましたが、今度はインストールしたパッケージのコマンドが使えないようです。

zsh: command not found: amplify

これは先程新たに作ったインストールフォルダのパスが環境変数に通っていないので、そのコマンドが見つからないよ!って言われてますね。(そうです。amplifyを使おうとしています。)

環境変数のパスを確認する

まずは今PATHがどこに通っているか調べます

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

:が場所の区切り文字です。何箇所か通ってますね。(ちなみにこれらのパスは/etc/pathsの中に書かれています。)

環境変数PATHが意味するものは、これらのbinの中にあるコマンドは特に場所を指定せずとも使える、ということです。

逆に言うと、面倒ですが毎回hogehoge/bin/コマンドとかディレクトリを指定してコマンドを叩けば動きます。これが面倒なので環境変数で設定しておくんですね。

環境変数のパスを追加する

それではこのPATHに先程グローバルインストールしたbinディレクトリを追加していきます。

$ vi .zshrc

.zshrc内に以下を書き込み保存します。

export PATH=$HOME/.npm_global/bin

以下のコマンドで書き込んだ設定を読み込みます。

$ source .zshrc

反映されているか確認します。

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/(foobar)/.npm_global/bin/

追加されてますね。

これで晴れてコマンドが使えるようになりました!

まとめ

というわけで今回はnpm install -gで権限エラーでインストールできない問題をインストール先を変えることで解決しました。

また、インストールしたパッケージのコマンドを、環境変数にパスを通してわざわざ場所を指定しなくてもグローバルに使えるようにしました。

これでグローバルインストールや環境変数のパスをいじるのも怖くなくなりました!

参考記事

以下の記事を参考にさせていただきました。ありがとうございます!

きちんとわかる、npm install | 第1回 PCにコマンドをインストールする

「パスを通す」でやっていること(mac OS/zsh)

【zsh, bash】macでPATHを通す方法 - not found と出てしまったら

ads【オススメ】未経験からプログラマーへ転職できる【GEEK JOBキャンプ】
▼ Amazonオススメ商品
ディスプレイライト デスクライト BenQ ScreenBar モニター掛け式
スマートLEDフロアライト 間接照明 Alexa/Google Home対応

Author

Penta

都内で働くITエンジニアもどき。好きなものは音楽・健康・貯金・シンプルでミニマルな暮らし。AWSクラウドやデータサイエンスを勉強中。学んだことや体験談をのんびり書いてます。TypeScript / Next.js / React / Python / AWS / インデックス投資 / 高配当株投資 More profile

Location : Tokyo, JPN

Contact : Twitter@penguinchord

Recommended Posts

Copy Right / Penguin Chord, ペンギンコード (penguinchord.com) 2022 / Twitter@penguinchord