错误:EACCES:权限被拒绝


97

我运行npm install lodash,但它抛出错误:EACCES:权限被拒绝错误。我知道这是权限问题,但据我所知,本地安装节点模块不需要sudo权限。如果我使用sudo运行它,它将安装在〜/ node_modules文件夹中。drwxrwxr-x是现有文件夹的文件许可权。我不知道可能出了什么问题。

下面是错误消息。

npm ERR! tar.unpack untar error /home/rupesh/.npm/lodash/4.13.1/package.tgz
npm ERR! Linux 3.13.0-88-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "lodash"
npm ERR! node v4.3.1
npm ERR! npm  v2.14.12
npm ERR! path /home/rupesh/node_modules/lodash
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir

npm ERR! Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash'
npm ERR!     at Error (native)
npm ERR!  { [Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash']
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:35:25',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:47:53',
npm ERR!      'FSReqWrap.oncomplete (fs.js:82:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/rupesh/Desktop/es6/npm-debug.log

node_modules根的所有者是谁?
AJS

我尚未在其中安装lodash的文件夹内未创建node_module文件夹。
xruptronics

您是否在/ home / rupesh /目录或其他目录中运行npm install?
AJS

我在其中运行npm install的文件夹的路径是〜/ Desktop / es6
xruptronics

ls -l ~/Desktop | grep es6确保您是es6目录的所有者的输出是什么
AJS

Answers:


78

此命令解决了该问题。它为我工作:

sudo npm install -g --unsafe-perm=true --allow-root

对于像我这样的人,尽管在编写本文时此命令似乎已经起作用,但对于Node v10.10.0我却遇到以下错误:“ npm ERR!无法安装/ var / www / project:缺少软件包名称”
Wayne Smallman

1
标志--unsafe-perm = true --allow-root使用节点v10.15.0为我们工作,以用户root身份安装了一个不会安装node-sass的现有应用程序。我们用来将node-sass安装到本地目录node_modules文件夹的确切命令是#npm install --save-dev --unsafe-perm = true --allow-root node-sass @ latest
Peter Edwards

您可以使用root来解决问题(尽管不建议这样做)。
克里斯·

我能够通过使用这些标志使其工作,所以真正的答案是:sudo npm install -g --unsafe-perm = true --allow-root <软件包名称> @ <版本名称>
Frank Hu MSFT

45

我在全球范围内安装webpack服务器时遇到相同的问题,请使用此网址中的步骤解决了我的问题,请为您工作。

上面提到的步骤有:在开始之前备份计算机。

创建用于全局安装的目录:

1。 mkdir ~/.npm-global

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

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

打开或创建〜/ .profile文件并添加以下行:

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

返回命令行,更新系统变量:

4。source ~/.profile

测试:在不使用sudo的情况下全局下载软件包

npm install -g jshint

可以使用相应的ENV变量代替步骤2-4(例如,如果您不想修改〜/ .profile):

NPM_CONFIG_PREFIX=~/.npm-global

1
在莫哈韦沙漠上工作。在经过4-5小时的故障排除后,非常感谢,这确实有用!
约翰尼,

11

使用npm init创建package.json解决了我的问题。


但是我不确定为什么在安装节点模块时需要package.json文件,因为在我的情况下,因为我没有使用--save或--save-dev或类似命令,所以未更新或使用package.json文件。
xruptronics

这很奇怪。我认为某些事情在您的npm conf中弄乱了,并进行了init重置,无论如何,这应该永远是个谜,因为我在其他地方找不到任何类似问题的参考。
AJS

npm 6.9.0也有类似的问题,这也对我有用。
克里斯·马罗塔

11

我在Linux上有问题。我写

chown -R myUserName ./* 

在我的项目文件夹中。


6
非常不推荐。这会涉及到所有目录,并删除其中任何目录的根权限。如果需要将某些东西设置为root,这会破坏当前配置。
Patrick Da Silva

7

根据我在您发布的日志中看到的信息:

npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',

目录/home/rupesh/node_modules/没有创建目录所需的权限,因此运行chown -r rupesh:rupesh /home/rupesh/node_modules/此目录即可解决该问题。


做chown -R rupesh:rupesh / home / rupesh / node_modules /并运行npm install lodash再次将lodash安装在〜/ node_module文件夹中。但这一次它不会抛出错误。但这不是我打算安装的地方。
xruptronics '16

是的,我知道您应该在您的主目录而不是桌面中创建项目。npm由于某种原因正在安装模块/home/rupesh/node_modules。无论如何,在主目录中使用任何方式都应该是理想的方式
AJS

我认为〜/ Projects / es6等效于〜/ Desktop / es6结构,我想弄清楚的是为什么没有在es6文件夹内创建node_modules以及为什么没有在其中安装lodash(或任何东西)模块。我以前没有遇到过这个问题,但是今天出了什么问题,这就是我要解决的问题。
xruptronics

是的,我阅读了我的前两个评论并意识到了自己的愚蠢:),好吧我环顾四周,找不到其他人遇到同样的问题。您的代码能够找到loadash模块吗?
AJS


6

这立即解决了我的问题-mac Mojave 10.14.6-PhpStorm。

未处理的拒绝错误:EACCES:权限被拒绝,mkdir'/Users/myname/.npm/_cacache/index-v5/fb/5a'

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

原始帖子:https//stackoverflow.com/a/50639828


5

尝试使用以下命令将所有权限授予您的项目文件夹

sudo chmod -R 777 /yourProjectDirectoryName

sudo npm install lodash

这是一个
小型

您甚至可能不需要777。对我而言,问题是#号太低了。(775解决了问题。)
Andrew

4

FWIW我有相同的症状,但包装不同。创建package.json并运行npm init没有解决我的问题。

在此系统上,显然是使用root权限在此位置创建了新文件夹。中npm install,将创建新文件夹。即使使用sudo,这也会导致npm安装失败。

解决方案是npm install app在没有根umask的其他位置运行。


4

相关问题:

浪费了3个小时,持续了几天。

在AWS EC2机器上,以下工作正常:

sudo chown -R $(whoami) /home/ubuntu/.cache
sudo chown -R $(whoami) /home/ubuntu/.config
sudo chown -R $(whoami) /home/ubuntu/.local
sudo chown -R $(whoami) /home/ubuntu/.npm
sudo chown -R $(whoami) /home/ubuntu/.pm2

希望能有所帮助。


3

我通过更改npm目录的权限解决了此问题。我去了npm全球目录

/home/<user-name>

我通过输入以下命令转到该目录

cd /home/<user-name>

然后通过输入此命令更改.npm文件夹的权限。

sudo chmod -R 777 ".npm"

它对我来说就像一种魅力。但是,这存在一个安全漏洞,即您的全局软件包目录可用于所有级别。


您为什么要允许全世界访问此特定文件夹?
egdavid

2

首先在根目录下不带-g(全局)的位置进行安装。尝试使用-g(全局)后,它对我有用。


工作了!在Mac上,将我的代码文件夹移动到了我的根文件夹:HardDrive /,并且“ npm install”运行完美。然后,我将代码文件夹移回到HardDrive / users / myUserName / Projects / code中想要的位置,再次运行“ npm install”,这一次成功了。
乔什

2

LUBUNTU 19.10 /运行同一问题:$ npm start

转储:错误:EACCES:权限被拒绝,在对象处打开'/home/simon/xxx/pagebuilder/resources/scripts/registration/node_modules/.cache/@babel/register/.babel.7.4.0.development.json'。保存时(/ home / simon / xxx / pagebuilder / resources / scripts / registration / node_modules / @ babel /)处的Object.fs.writeFileSync(fs.js:1299:33)处的fs.openSync(fs.js:646:18)在function.Module.runMain的_combinedTickCallback(内部/进程/next_tick.js:132:7)处的register / lib / cache.js:52:15)在process._tickCallback(内部/process/next_tick.js:181:9)处的_combinedTickCallback(internal / process / next_tick.js:132:7) (module.js:696:11)。(/home/simon/xxxx/pagebuilder/resources/scripts/registration/node_modules/@babel/node/lib/_babel-node.js:234:23)位于对象的Module._compile(module.js:653:30) .Module._extensions..js(module.js:664:10)位于Module.load(module.js:566:32)

看来我的默认用户(管理员)对节点模块目录没有权限。

这为我解决了!

$ sudo chmod a+w node_modules -R ## from project root


2

尝试使用此方法:在命令行的主目录中,为全局安装创建目录:

mkdir ~/.npm-global

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

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

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

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

在命令行上,更新系统变量:

source ~/.profile

在不使用sudo的情况下测试全局安装软件包,希望对您有所帮助


1

这是GNU / Linux(Debian)用户的解决方案(用您的用户名替换USERNAME):

sudo chown -R $USER:$(id -gn $USER) /home/USERNAME/.config


0

在Windows上,最终导致该端口已被IIS使用。

停止IIS(右键单击,退出),解决了该问题。


0

只需将全局node_modules目录的所有者更改为您的用户即可:

sudo chown -R $USER:$GROUP /usr/local/lib/node_modules

-2

执行这些命令即可解决问题!

sudo chmod -R 777 /usr/local/bin
sudo chmod -R 777 /usr/local/lib/node_modules

对于/usr/local及所有子目录,权限应归rwxr-xr-xroot所有。系统用户可以在此目录结构中读取和执行,但不能编辑,创建文件。话虽如此,您的答案建议将权限授予所有人。并且,没有描述将如何以及将受到什么影响,或者为什么会解决该问题。
库里拉伊
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.