修复 npm 权限问题(翻译)
好吧,没啥,就是他们最近在迁移服务器的时候,安装 npm 包的时候又遇到 Please try running this command again as root/Administrator.
这个问题了,然后就准备把这个问题记一下,方便为遇到同样问题的同学参考吧
原文地址: https://docs.npmjs.com/getting-started/fixing-npm-permissions
当你安装一个包到全局的时候可能会遇到一个 EACCES
错误,这是因为你没有 npm 存储全局包的目录的写权限。
你可以通过两种途径来修复这个问题:
- 修改 npm 默认目录的权限
- 修改 npm 默认目录到其他目录
在进行一下操作之前,请先备份一下你的电脑
方法1:修改 npm 默认目录的权限
- 找到 npm 默认目录的路径
npm config get prefix
对于大多数的系统来说,应该是 /usr/local
注意: 如果你显示的路径是只是 /usr
,请使用 方法2
- 修改 npm 目录所有者为当前用户
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
这将修改所有被 npm 和其他工具(lib/node_modules, bin 和 share)使用的子目录的权限
方法2:修改 npm 默认目录到其他目录
有些时候你会因为某些问题不想修改 npm 目录(像:/usr)的所有关系,比如你在跟另外的用户共享系统的时候。
我们可以通过修改配置让 npm 使用一个不同目录来代替。在下面的例子里,我们使用了一个在我们 home 目录下的一个隐藏目录
- 创建一个用于安装全局包的目录
mkdir ~/.npm-global
- 配置 npm 使用新的目录路径
npm config set prefix '~/.npm-global'
- 打开或者创建一个
~/.profile
文件并且添加一行
export PATH=~/.npm-global/bin:$PATH
- 回到命令行,更新系统变量
source ~/.profile
测试一下,不使用 sudo
下载一个包到全局
npm install -g jshint
你也可以使用环境变量来代替 2~4 步(当你不想更改 ~/.profile
)
NPM_CONFIG_PREFIX=~/.npm-global npm install -g jshint
OK, 就这样啦~ 希望会有帮助吧