這裡介紹如何更改 npm
的 prefix
設定,解決安裝 global 套件老是需要 root
權限的問題。
npm
套件管理程式來安裝,而在使用 npm install -g
安裝時,如果沒有使用 root
權限,通常都會出現這樣的錯誤訊息:
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
最簡單的解決方式當然就是直接加上 sudo
來安裝,但是這樣其實對於系統安全來說,並不是一個很好的方式。
如果想要完全以普通使用者的權限來安裝所有的 npm
套件與執行檔,其實只要稍微更改一下它的設定即可,以下是操作步驟。
npm
的 prefix
設定執行以下指令,將 npm
的 prefix
設定改為 ~/.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