如何在Laravel Sail环境中正确更新npm版本
报错原因
你遇到的EACCES权限错误是因为默认情况下sail执行命令时使用容器内的普通用户sail,没有权限修改/usr/lib/node_modules这类系统级目录,因此全局安装npm会被系统拦截。
解决方案
你可以根据需求选择以下任意一种方法:
方法一:临时更新npm版本(重建容器后会恢复原有版本)
直接以root身份执行npm全局更新命令即可:
- 进入Sail容器的root交互终端:
./vendor/bin/sail root-shell
- 在容器内执行npm更新命令:
npm install -g npm@7.19.0
- 执行完成后输入
exit退出终端即可。 - 验证版本:执行
./vendor/bin/sail npm -v确认版本已更新为7.19.0。
方法二:永久固定npm版本(重建容器也不会失效)
如果希望后续重建Sail镜像时自动保留指定npm版本,可以自定义Sail的Docker配置:
- 发布Sail的默认Docker配置文件到项目目录:
php artisan sail:publish
- 打开项目下
docker/[PHP版本号]/Dockerfile文件(比如你使用PHP 8.0就是docker/8.0/Dockerfile),在安装Node.js的相关命令下方新增一行:
RUN npm install -g npm@7.19.0
- 重新构建Sail镜像:
./vendor/bin/sail build --no-cache
- 重启Sail容器后即可生效,后续无论多少次重建镜像,npm都会保持7.19.0版本。
内容的提问来源于stack exchange,提问作者gabys
相关产品推荐
相关产品推荐

