Nodejs 使用sudo仍然显示Error: EACCES

Nodejs 使用sudo仍然显示Error: EACCES

用yoeman 生成webapp 然后出现了权限错误

sudo yo webapp … npm ERR! Error: EACCES, mkdir '/Users/apple/.npm/each-async/0.1.3’ npm ERR! { [Error: EACCES, mkdir ‘/Users/apple/.npm/each-async/0.1.3’] npm ERR! errno: 3, npm ERR! code: ‘EACCES’, npm ERR! path: ‘/Users/apple/.npm/each-async/0.1.3’, npm ERR! parent: ‘grunt-svgmin’ } npm ERR! npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 14.0.0 npm ERR! command “/usr/local/bin/node” “/usr/local/bin/npm” "install" npm ERR! cwd /Users/apple/test/webtest/test npm ERR! node -v v0.10.33 npm ERR! npm -v 1.4.28 npm ERR! path /Users/apple/.npm/each-async/0.1.3 npm ERR! code EACCES npm ERR! errno 3 npm ERR! stack Error: EACCES, mkdir '/Users/apple/.npm/each-async/0.1.3’ npm ERR! not ok code 0


5 回复

Nodejs 使用sudo仍然显示Error: EACCES

当你尝试使用 sudo 运行 yo webapp 命令时,遇到了权限错误(Error: EACCES),这通常是因为某些文件或目录的权限设置不正确。尽管你使用了 sudo,但某些操作可能仍然会遇到权限问题。

问题描述

你使用 sudo 运行 yo webapp 命令时,遇到了以下错误:

npm ERR! Error: EACCES, mkdir '/Users/apple/.npm/each-async/0.1.3'
npm ERR! { [Error: EACCES, mkdir '/Users/apple/.npm/each-async/0.1.3']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/apple/.npm/each-async/0.1.3',
npm ERR!   parent: 'grunt-svgmin' }

解决方法

1. 修改 .npm 目录的权限

你可以通过修改 .npm 目录的权限来解决这个问题。首先,找到 .npm 目录的位置:

ls -ld ~/.npm

如果权限设置不正确,可以使用 chmod 命令修改权限:

sudo chmod -R 755 ~/.npm

2. 更改 .npm 目录的所有者

另一种方法是更改 .npm 目录的所有者为你当前的用户:

sudo chown -R $USER ~/.npm

3. 使用 --unsafe-perm 参数

如果你在使用 npm install 时遇到类似的问题,可以添加 --unsafe-perm 参数来避免权限问题:

sudo npm install --unsafe-perm

4. 创建一个全局 NPM 配置文件

创建一个全局的 NPM 配置文件,并将全局安装路径设置为你的用户目录:

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

然后更新你的 shell 配置文件(如 .bashrc.zshrc)以包含新的路径:

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

最后,重新加载配置文件:

source ~/.bashrc  # 或 source ~/.zshrc

现在,你可以使用 npm install -g <package> 来全局安装包,而不会遇到权限问题。

示例代码

假设你已经设置了全局 NPM 配置文件,可以这样全局安装 yogenerator-webapp

npm install -g yo generator-webapp

然后运行 yo webapp

yo webapp

通过这些步骤,你应该能够解决 Error: EACCES 的问题,并成功运行 yo webapp


手动把~/.npm下的文件权限变成777吧. 本人不是Mac环境, 不知道Mac下的Node环境问题.

楼主的用户名为apple? 不同的用户对于另外一个账户的操作是没有权限的

mkdir 出现错误, 会不会是依赖太深造成的 , 好郁闷啊

这个问题通常发生在尝试创建或修改某个文件或目录时,由于权限不足导致。尽管使用了 sudo,但有时某些目录可能仍然受到系统默认的安全策略限制。

在Node.js环境中,特别是涉及到全局安装npm包或者某些用户特定的缓存目录(如.npm)时,可能会遇到这种问题。解决方案可以分为几个方面:

解决方案

1. 更改文件或目录的权限

你可以手动更改你的 .npm 目录的权限,使其允许当前用户写入:

sudo chown -R $(whoami) ~/.npm

这会将 .npm 目录的所有权改为当前用户。

2. 使用局部安装

如果可能的话,考虑使用局部安装而不是全局安装依赖项。局部安装可以避免很多权限问题。

npm install <package-name> --save

3. 更改npm缓存目录

可以更改npm的缓存目录到一个当前用户有权限写入的地方:

mkdir ~/npm-cache
npm config set cache ~/npm-cache --global

4. 使用 nvm 管理 Node.js 版本

使用nvm(Node Version Manager)来管理不同的Node.js版本,可以帮助避免全局包带来的权限冲突问题。

以上方法应该能够解决大部分的权限问题。如果问题仍然存在,请检查是否有其他安全软件或系统策略在限制操作。

回到顶部