当尝试安装LESS时出现“请以Root/Administrator身份再次运行此命令”的错误提示。

65

我正在尝试在我的电脑上安装LESS,并已经安装了Node。但是,当我输入“node install -g less”时,出现以下错误,不确定该怎么做?

FPaulMAC:bin paul$ npm install -g less
npm ERR! Error: EACCES, unlink '/usr/local/lib/node_modules/less'
npm ERR!  { [Error: EACCES, unlink '/usr/local/lib/node_modules/less']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/less' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 13.3.0
npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "less"
npm ERR! cwd /usr/local/bin
npm ERR! node -v v0.10.33
npm ERR! npm -v 1.4.28
npm ERR! path /usr/local/lib/node_modules/less
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, unlink '/usr/local/lib/node_modules/less'
npm ERR! error rolling back Error: EACCES, unlink '/usr/local/lib/node_modules/less'
npm ERR! error rolling back  { [Error: EACCES, unlink '/usr/local/lib/node_modules/less']
npm ERR! error rolling back   errno: 3,
npm ERR! error rolling back   code: 'EACCES',
npm ERR! error rolling back   path: '/usr/local/lib/node_modules/less' }
npm ERR! not ok code 0

1
可能是NPM无法在没有sudo的情况下运行时出错的重复问题。 - KyleMit
13个回答

73

关于 Explosion Pills的问题:"一个安装程序可以运行任意脚本,以sudo权限运行可能非常危险!"

看起来使用sudo是错误的方法。

"将/usr/local文件夹中的文件的所有者更改为当前用户:"

sudo chown -R $USER /usr/local

然后运行安装程序

node install -g less

请查看:


“sudo”这个术语不被识别为命令、函数、脚本文件或可操作程序的名称。 - shuklendu
2
仅供参考,在OSX High Sierra中,不再可能chown /usr/local,因为它受到限制。 - Benjamin

31
< p > 说实话,这是npm给出的糟糕建议。 安装可能会运行任意脚本,使用sudo运行可能非常危险!你可以运行sudo npm install -g less进行全局安装,但我建议更新您的npm设置: < /p>
#~/.npmrc
prefix=~/.npm_modules

然后你可以更新你的路径:

#~/.bashrc or ~/.zshrc, etc.
export PATH=$PATH:$HOME/.npm_modules/bin

那么您不需要root权限来执行安装,仍然可以使用二进制文件。

然而,这仅适用于您的用户。如果您希望整个系统能够使用该模块,您需要告诉每个人添加您的路径。更复杂和健壮的解决方案包括添加一个具有节点模块/二进制文件的文件夹,可以安装到组中,并将添加到每个人的路径中。


@StackOverflow 我建议你在 .npmrc.bashrc/.zshrc 配置文件中进行以下更新。 # 符号表示注释并显示文件名。 - Explosion Pills
@StackOverflow中,~表示您的主目录。 ~/.npmrc应该是一个实际的文件。 - Explosion Pills
这对于任何在共享服务器上工作的人来说都是正确的答案。仅为了npm而操纵/usr/local只在单用户系统上有意义。 - Gordon

31

只需在命令开头添加sudo。 如之前所述,安装会运行一些可能危险的脚本,但我发现全局安装可以很好地解决问题,而且更加简单。

运行sudo npm install -g less


你可能想说的是“prepend”,而不是“append”,即使这样,它也不是最好的解决方案。 - Bernard Saucier

15

这一定会有帮助。答案来自npm本身。 https://docs.npmjs.com/getting-started/fixing-npm-permissions

下面是从链接中提取出来的内容。


选项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的默认目录为另一个目录

  1. 创建一个全局安装目录:

    mkdir ~/.npm-global

  2. 配置npm使用新的目录路径:

    npm config set prefix '~/.npm-global'

  3. 打开或创建一个~/.profile文件并添加这一行:

    export PATH=~/.npm-global/bin:$PATH

  4. 回到命令行,更新您的系统变量:

    source ~/.profile

测试:全局下载软件包而不使用sudo。

`npm install -g jshint`

步骤2-4可以替换为使用对应的环境变量(例如,如果您不想修改~/.profile):

NPM_CONFIG_PREFIX=~/.npm-global


选项3:使用负责此事的包管理器

如果您正在Mac OS上进行Node的全新安装,则可以通过使用Homebrew包管理器来完全避免此问题。 Homebrew会在开箱即用时以正确的权限设置好所有内容。

brew install node


1
对我有用。Atom SASS Autocompile 包出现错误 "/bin/sh: node-sass: command not found",需要全局安装 node-sass。 - Gilberto

5
我一直遇到这个问题是因为Windows将我的node_modules文件夹设置为只读。请确保取消此选项。
请参照以下截图:enter image description here

2
以下是我必须执行的步骤,以使用Less编译器避免OP中提到的问题:
  1. 安装node.js
  2. 使用终端安装NPM:sudo npm install npm -g
  3. 使用终端安装Less编译器:sudo npm install -g less(sudo很重要)
  4. 如果您使用的是PHPstorm:转到“首选项...>插件”并安装NodeJS插件(可能需要“浏览存储库”才能找到它),然后重新启动PHPstorm(如提示所示)
  5. 之后再次转到插件:安装Less编译器(可能需要“浏览存储库”才能找到它),然后重新启动PHPstorm(如提示所示)
  6. 设置项目后,转到“设置>工具>文件监视器”,并添加“Less”。 “程序”的路径应该类似于这样:/usr/local/bin/lessc
  7. 确保在第6条的设置中选中了仅跟踪根文件

1

当你遇到EACCES(错误:访问)错误时,npm有一个关于修复npm权限的官方页面。该页面甚至有一个视频。

您可以使用以下两个选项之一解决此问题:

  1. 更改npm默认目录的权限。
  2. 将npm的默认目录更改为另一个目录。

0

我知道这是一个老问题,但是没有一个解决方案看起来像是一个好的实践,因此我将介绍我如何解决这个问题:

尝试使用Homebrew解决这个问题,但它也会在/usr/local目录中安装node,这将再次导致EACCES错误。

必须使用版本管理器,例如nvm,有关更多信息,请参见官方npm指南

适用于各种操作系统

nvm将node及其模块安装在用户的主文件夹中,从而解决了EACCES问题。


0

我在安装expo cli时遇到了问题,但只需按照npm文档这里中提到的四个步骤进行操作,就能解决问题。

问题在于某些版本的npm无法定位全局安装包的文件夹。按照以下步骤,我们可以在用户主目录中创建或修改.profile文件,并在其中添加正确的PATH路径,使其像魔术一样工作。

尝试这样做,它帮助了我,我为此问题花了约一个小时。我的节点版本是6.0

我遵循的步骤如下:

备份你的电脑。 在命令行中,进入你的主目录,创建一个用于全局安装的文件夹:

mkdir ~/.npm-global

配置npm使用新的目录路径:

npm config set prefix '~/.npm-global'

在你喜欢的文本编辑器中,打开或创建一个~/.profile文件并添加以下行:

export PATH=~/.npm-global/bin:$PATH

在命令行中,更新你的系统变量:

source ~/.profile

为了测试您的新配置,请全局安装一个软件包而不使用sudo:

npm install -g jshint


0

我一直遇到这个问题,最终找到了这个解决方案(适用于Mac)...

本文将指导您如何将当前配置文件更改为根用户,或者...如果您想自己登录根(配置文件),则可以用于任何目的。

https://support.apple.com/en-us/HT204012#:~:text=Click%20Open%20Directory%20Utility.&text=in%20the%20Directory%20Utility%20window,use%20for%20the%20root%20user

如果这不起作用,请尝试:

https://apple.stackexchange.com/questions/316304/how-to-run-a-root-admin-shell-in-terminal

希望这篇文章能帮助到任何阅读它的人...反复遇到这个问题确实很烦人。

鼓励提供外部资源链接,但请添加上下文说明链接的内容和目的。在引用重要链接时,请引用最相关的部分,以防目标站点无法访问或永久离线。 - jasie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接