运行ionic serve报spawn ng EACCES错误该如何解决?
运行
ionic serve出现spawn ng EACCES错误的原因与解决办法 报错详情
ng run app:serve --host=localhost --port=8100 Error: spawn ng EACCES
触发原因
EACCES属于系统权限类错误,核心触发逻辑是当前执行ionic serve的用户,没有权限调用Angular CLI对应的ng可执行文件,常见场景如下:
@angular/cli全局安装时使用了root/sudo权限,导致普通用户账号没有执行权限- 项目本地node_modules目录下的
ng可执行文件未被赋予可执行权限 - 全局npm包安装目录权限配置错误,普通用户无法访问全局安装的npm工具
- macOS、Linux环境下npm默认全局路径为系统级目录,普通用户默认没有该目录的读写执行权限
解决办法
方案1:修复ng文件可执行权限(快速验证)
- 针对本地项目ng权限问题,在项目根目录执行命令添加可执行权限:
chmod +x ./node_modules/.bin/ng,执行完成后重新运行ionic serve验证 - 针对全局ng权限问题,执行命令修改全局cli目录权限:
sudo chmod -R 755 /usr/local/lib/node_modules/@angular/cli,若使用nvm等node版本管理工具,需将路径替换为对应工具的全局npm包存储路径
方案2:调整npm全局包安装路径(根治权限问题)
- 卸载之前用root权限安装的angular cli:
sudo npm uninstall -g @angular/cli - 在当前用户目录下创建专属的npm全局包存储目录:
mkdir ~/.npm-global - 配置npm使用新的全局存储路径:
npm config set prefix '~/.npm-global' - 编辑shell配置文件(
~/.bashrc或~/.zshrc,依实际使用的shell而定),在末尾添加环境变量配置:export PATH=~/.npm-global/bin:$PATH - 重载配置文件使环境变量生效:
source ~/.bashrc(对应你修改的配置文件名称) - 用普通用户身份重新安装angular cli:
npm install -g @angular/cli - 执行
ng version验证工具可用后,重新运行ionic serve即可
方案3:临时提权验证(仅用于问题定位,不建议日常使用)
- 类Unix系统下可临时用sudo提权运行命令:
sudo ionic serve,若可正常启动则可确认问题属于权限配置错误,再用上述两个方案修复即可
内容的提问来源于stack exchange,提问作者Gabriel de Espindula
相关产品推荐
相关产品推荐


