答案是报错路径指向vendor/或composer.lock归属root,应执行sudo chown -R $USER:$USER vendor/ composer.lock修复所有权,禁用chmod 777;若缓存目录被root占用,则用sudo chown -R $USER:$USER $(composer config --global cache-dir)修复。

直接看报错路径,90% 是 vendor/ 或 composer.lock 归属为 root,不是权限位(rwx)不够,而是所有权错配。
报错里出现 Permission denied,先查 vendor/ 和 composer.lock 归属
终端错误行一定会带完整路径,比如 file_put_contents(/home/me/project/vendor/autoload.php): Failed to open stream: Permission denied,问题就在 vendor/;又或者 Could not write to /home/me/project/composer.lock,那 composer.lock 就是病灶。
立刻执行这两条命令确认归属:
ls -ld vendor/ls -ld composer.lock
只要任一输出第一列显示 root root(而非你的用户名),就确认是所有权错配。别碰 chmod -R 777——它会让 vendor/bin/phpunit 这类可执行文件被 CI 工具拒绝,Git 提交时还会报 ownership changed。
正确做法只有一条:sudo chown -R $USER:$USER vendor/ composer.lock。注意末尾不能漏掉 composer.lock,否则下次 composer update 可能只失败一半。
composer update 卡在缓存写入失败?检查全局缓存目录
如果错误里出现类似 Writing cache file ~/.composer/cache/repo/https---packagist.org/,说明 ~/.composer/cache/ 被 root 占了。
先拿到当前缓存路径:composer config --global cache-dir,再查归属:ls -ld $(composer config --global cache-dir)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
若属主是 root,执行:sudo chown -R $USER:$USER $(composer config --global cache-dir)。
整片 ~/.composer 都被污染?直接重置:sudo chown -R $USER:$USER ~/.composer。特别留意 ~/.composer/auth.json 和 ~/.composer/cache/plugins/,它们常因镜像 token 配置被 sudo 写入而卡住。
为什么 sudo composer update 是污染源头,不是解法
sudo composer update 会让新生成的 vendor/ 子目录、composer.lock、甚至临时解压目录全部变成 root 所有。后续普通用户运行 composer dump-autoload 或 composer run-script 就会静默失败或只失败一半——这种嵌套归属混乱,chown -R 都可能救不回来。
真正该用 sudo 的地方只有两个:
sudo chown -R $USER:$USER vendor/ composer.locksudo chown -R $USER:$USER $(composer config --global cache-dir)
其余所有 composer 命令,必须以当前用户身份运行。CI/CD 或 Docker 环境里更脆,得提前用 COMPOSER_CACHE_DIR="$PWD/.composer-cache" 指向项目内可写路径,再加 --no-plugins --no-scripts 降低权限需求。
删 vendor/ 重装比硬修更可靠
如果 vendor/ 下混有软链接(如指向全局 bin)、或 chown -R 后仍报错,说明结构已受损。安全做法是彻底清理:
rm -rf vendor composer.lock-
composer install --no-scripts(先验证基础结构) -
composer run-script post-install-cmd(补全脚本)
这个流程绕过所有归属残留,也避免误伤符号链接。WSL 或 Docker 中挂载 Windows 路径(如 /mnt/c/)时,更要优先把项目移到 WSL 原生路径(如 ~/projects/),否则 chown 可能完全不生效。

















