問題描述
今天在使用npm install -g語法的時候,總是出錯。日志文件顯示對npm-modules下的子文件夾沒有寫的權限(在安裝modules的時候會創建這個模塊的文件夾)。情況如下:
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/webpack/node_modules/loader-utils
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/webpack/node_modules/mkdirp
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/webpack/node_modules/node-libs-browser
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/webpack/node_modules/supports-color
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/webpack/node_modules/uglifyjs-webpack-plugin
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/webpack/node_modules/watchpack
npm ERR! path /usr/local/lib/node_modules/webpack/node_modules/camelcase
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall access
npm ERR! enoent ENOENT: no such file or directory, access '/usr/local/lib/node_modules/webpack/node_modules/camelcase'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/xxx/.npm/_logs/2018-02-09T02_33_46_372Z-debug.log
然后使用了chmod命令更改了這個文件夾的權限是777之后仍然不行。最后使用sudo命令來安裝,神奇的情況是盡然也是顯示同樣的權限問題。最后只好求助於谷歌,正好翻到node開發的issue的追蹤,里面詳細的說明了怎么巧妙的解決這個問題。
解決辦法
官方給出的一個解決辦法是給npm的global安裝位置換個地方,因為默認的安裝位置是/usr/local/lib所在的文件夾,這是系統的文件夾所在地,所以可能會出現一些讀寫問題。將module的安裝根目錄設置在一般的文件夾下則沒有這么多問題,下面是官方方法:
第一步:在你的用戶文件下新建一個文件夾,這個.npm-global 名字可以用你自己喜歡的名字替換,推薦直接使用這個名字。
mkdir ~/.npm-global
第二步:更改node的安裝連接
npm config set prefix '~/.npm-global'
第三步:在用戶的profile下增加path,為的是系統能夠找到可執行文件的目錄
export PATH=~/.npm-global/bin:$PATH
第四步:update profile。使其生效
source ~/.profile
經過上面的四步驟,就可以使用npm安裝了,效果如下:
/Users/zyc/.npm-global/bin/webpack -> /Users/xxx/.npm-global/lib/node_modules/webpack/bin/webpack.js
fsevents@1.1.3 install /Users/xxx/.npm-global/lib/node_modules/webpack/node_modules/fsevents
node install
[fsevents] Success: "/Users/xxx/.npm-global/lib/node_modules/webpack/node_modules/fsevents/lib/binding/Release/node-v59-darwin-x64/fse.node" is installed via remote
uglifyjs-webpack-plugin@0.4.6 postinstall /Users/zyc/.npm-global/lib/node_modules/webpack/node_modules/uglifyjs-webpack-plugin
node lib/post_install.js
- webpack@3.10.0
added 367 packages in 31.471s
我們可以看到上面的安裝命令中已經顯示,新安裝的webpack已經安裝到用戶下的.npm-global文件夾下面了。使用這個命令需要注意的是,可能你之前安裝在默認位置的一些模塊沒法使用,解決的辦法就是重新安裝或是將原來位置的模塊拷貝到新的文件位置,或是在profile文件中增添原來文件的path位置,為了不出錯,還是直接重新安裝吧。
作者:北靜王
鏈接:https://www.jianshu.com/p/31744aa44824
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。