composer install是唯一能复刻原环境的操作,它严格按composer.lock的commit hash、dist url和sha256校验和安装,不解析composer.json版本约束;复制vendor目录90%失败,因其含平台路径、abi痕迹和权限问题。

composer install 是唯一能复刻原环境的操作
别试复制 vendor/ 目录,它不是静态资源包,而是带平台路径、ABI 编译痕迹和哈希校验的运行时产物。跨服务器后 Class not found、undefined symbol、Failed to open stream 这些报错,90% 都源于硬拷贝 vendor/。
真正可靠的入口只有 composer install——它不解析 composer.json 里的 ^2.0 或 ~3.5,只按 composer.lock 记录的 commit hash、dist URL 和 SHA256 校验和安装,确保每台机器装出来的依赖树完全一致。
- 如果没
composer.lock,composer install会自动退化成composer update,环境立刻分裂 -
composer update是开发阶段用的,迁移时用它等于主动引入兼容性风险 - 哪怕只差一个 PHP 小版本(如 8.1.24 vs 8.1.25),某些扩展 ABI 微变也会让
vendor/失效
迁移前必须确认的三件事
缺一不可,否则不是报错,就是装错——而且错误常在运行时才暴露,不是 composer install 阶段。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
composer.lock必须存在且未被修改:执行ls -la | grep composer.lock;若 Git 没提交,回旧环境跑composer update --lock -
vendor/目录必须为空或不存在:composer install不清理旧文件,残留可能干扰 autoloader 映射,引发类行为错乱 - PHP 版本和扩展必须满足
composer.lock顶部"platform"字段声明:比如"php": ">=8.1.0",用php -v和php -m核对,比只看composer.json更准
私有包拉取失败的卡点与解法
composer.lock 里若含 GitLab、Satis 或本地路径包,composer install 会严格按 lock 记录的源地址拉取,但不会帮你配权限,也不会 fallback。
- 报
Cloning into ''或401 Unauthorized:说明缺认证凭据,需在项目根目录放auth.json,内容为{"http-basic": {"gitlab.example.com": {"username": "token", "password": "PAT_abc123"}}} - 用
--repository-url临时指定源时,值必须是合法 JSON,例如:{"type":"vcs","url":"https://gitlab.example.com/php/shared-utils.git"} - 避免 SSH URL(如
git@gitlab.example.com:)——CI 环境通常没配 SSH key,HTTPS + PAT 更可控 - 私有 Satis 源要确认其
provider-list已更新,且composer.lock中的dist URL可直连
autoload 失败的真实原因和修复动作
composer install 成功但运行时报 Class 'Illuminate\Foundation\Application' not found,大概率不是依赖没装,而是 autoloader 权限或用户隔离导致的。
- 确保
vendor/autoload.php可被 Web 用户(如www-data)读取,别用root身份装完就扔那儿 - Linux 下检查
vendor目录的 group 是否包含 Web 用户,必要时执行:chgrp -R www-data vendor && chmod -R g+r vendor - 入口文件第一行必须是
require __DIR__ . '/vendor/autoload.php';,且出现在所有旧require_once之前 - 如果旧项目用了无命名空间的老代码,别强行套 PSR-4,改用
classmap并运行composer dump-autoload -o
composer.lock 的完整性与 platform 字段的实际约束力——它不是建议,而是安装时的硬校验开关。










