如何解决Pop!_OS 23.04上Laravel 10的npm EPERM权限问题?
我在Pop!_OS 23.04上搭建全新Laravel项目,按照Laravel官方文档安装Breeze启动套件。先后通过二进制包和NVM安装了Node.js,但执行npm相关命令时遇到权限错误。
执行的命令:
php artisan breeze:install php artisan migrate npm install npm run dev
收到的错误信息:
npm ERR! code EPERM
npm ERR! syscall symlink
npm ERR! path ../autoprefixer/bin/autoprefixer
npm ERR! dest /media/luzkramer/HDD/codes/PHP/laravel/test/node_modules/.bin/autoprefixer
npm ERR! errno -1
npm ERR! Error: EPERM: operation not permitted, symlink '../autoprefixer/bin/autoprefixer' -> '/media/luzkramer/HDD/codes/PHP/laravel/test/node_modules/.bin/autoprefixer'
npm ERR! [Error: EPERM: operation not permitted, symlink '../autoprefixer/bin/autoprefixer' -> '/media/luzkramer/HDD/codes/PHP/laravel/test/node_modules/.bin/autoprefixer']
{
npm ERR! errno: -1,
npm ERR! code: 'EPERM',
npm ERR! syscall: 'symlink',
npm ERR! path: '../autoprefixer/bin/autoprefixer',
npm ERR! dest: '/media/luzkramer/HDD/codes/PHP/laravel/test/node_modules/.bin/autoprefixer'
npm ERR! }npm ERR! 操作被操作系统拒绝。
npm ERR! 你当前用户可能没有访问该文件的权限。
npm ERR! 如果你认为这是权限问题,请仔细检查文件及其所在目录的权限,或尝试以root/管理员身份重新运行命令。npm ERR! 完整日志可查看:/home/luzkramer/.npm/_logs/2024-01-12T19_43_19_456Z-debug-0.log
检查外部硬盘的挂载参数
项目存储在外部硬盘/media/luzkramer/HDD,Linux挂载外部分区时默认可能限制符号链接创建。先查看挂载参数:mount | grep /media/luzkramer/HDD若存在
noexec或nosymlink参数,重新挂载分区并添加权限:sudo umount /media/luzkramer/HDD sudo mount -o rw,exec,symlinks /dev/[你的硬盘设备名] /media/luzkramer/HDD(设备名可通过
lsblk命令查看)
要永久生效,编辑/etc/fstab,在对应分区的挂载参数中加入rw,exec,symlinks。修复项目目录权限
确保当前用户拥有项目目录的所有权:sudo chown -R luzkramer:luzkramer /media/luzkramer/HDD/codes/PHP/laravel/test sudo chmod -R 755 /media/luzkramer/HDD/codes/PHP/laravel/test避免用root运行npm
不要直接用sudo npm install,会导致node_modules归root所有。如果之前用sudo运行过,先修复权限:sudo chown -R luzkramer:luzkramer /media/luzkramer/HDD/codes/PHP/laravel/test/node_modules清理缓存后重试
npm cache clean --force rm -rf node_modules package-lock.json npm install npm run dev
内容的提问来源于stack exchange,提问作者William Kramer

