好吧,没啥,就是他们最近在迁移服务器的时候,安装 npm 包的时候又遇到 Please try running this command again as root/Administrator. 这个问题了,然后就准备把这个问题记一下,方便为遇到同样问题的同学参考吧

原文地址: https://docs.npmjs.com/getting-started/fixing-npm-permissions

当你安装一个包到全局的时候可能会遇到一个 EACCES 错误,这是因为你没有 npm 存储全局包的目录的写权限。

你可以通过两种途径来修复这个问题:

  1. 修改 npm 默认目录的权限
  2. 修改 npm 默认目录到其他目录

在进行一下操作之前,请先备份一下你的电脑

方法1:修改 npm 默认目录的权限

  1. 找到 npm 默认目录的路径
npm config get prefix

对于大多数的系统来说,应该是 /usr/local

注意: 如果你显示的路径是只是 /usr,请使用 方法2

  1. 修改 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 目录下的一个隐藏目录

  1. 创建一个用于安装全局包的目录
mkdir ~/.npm-global
  1. 配置 npm 使用新的目录路径
npm config set prefix '~/.npm-global'
  1. 打开或者创建一个 ~/.profile 文件并且添加一行
export PATH=~/.npm-global/bin:$PATH
  1. 回到命令行,更新系统变量
source ~/.profile

测试一下,不使用 sudo 下载一个包到全局

npm install -g jshint

你也可以使用环境变量来代替 2~4 步(当你不想更改 ~/.profile

NPM_CONFIG_PREFIX=~/.npm-global npm install -g jshint

OK, 就这样啦~ 希望会有帮助吧

标签: none

添加新评论