這裡介紹如何更改 npmprefix 設定,解決安裝 global 套件老是需要 root 權限的問題。


現在許多的網頁開發工具都會使用 npm 套件管理程式來安裝,而在使用 npm install -g 安裝時,如果沒有使用 root 權限,通常都會出現這樣的錯誤訊息:

npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'

最簡單的解決方式當然就是直接加上 sudo 來安裝,但是這樣其實對於系統安全來說,並不是一個很好的方式。

如果想要完全以普通使用者的權限來安裝所有的 npm 套件與執行檔,其實只要稍微更改一下它的設定即可,以下是操作步驟。

更改 npmprefix 設定

執行以下指令,將 npmprefix 設定改為 ~/.local

# 更改 npm 的 prefix 設定
npm config set prefix ~/.local  

事實上這一行指令的作用就是在自己的 HOME 目錄下建立一個 .npmrc 設定檔,而內容如下:

prefix=/Users/seal/.local

在經過這樣的設定之後,未來 npm 在使用 -g 參數安裝新的套件時,就會將套件放在 ~/.local/lib/node_modules/,而執行檔的連結則會建立在 ~/.local/bin 之下,這種方式同時適用於 Linux 與 Mac 系統。

更改 PATH 設定

由於未來所有 npm 套件的執行檔都會放在 ~/.local/bin 目錄下,所以我們要將此目錄加入自己的 PATH 環境變數,這樣在使用時才不會找不到執行檔:

# 將 ~/.local/bin 加入 PATH
export PATH=~/.local/bin:$PATH

這樣設定好之後,未來在使用 npm -g 安裝套件時,就可以不需要使用 root 權限(sudo)了。

補充說明

這裡的 ~/.local 目錄其實也可以自由換成其他的名稱,只要在 PATH 路徑的設定上都有對應好即可,例如 ~/.npm-global 也可以。

在選擇目錄名稱時,必須注意不能跟既有的目錄衝突,例如 ~/.npm 這一個目錄就不可以使用,因為它是 npm 預設的快取(cache)目錄。

若要查看 npm 預設的快取目錄設定,可以執行:

# 查看 npm 快取目錄設定
npm config get cache
/Users/seal/.npm

參考資料:Michael BethencourtRonnie Chang