直接迁移 vendor 目录不可靠,应仅备份 composer.json 和 composer.lock 并在新环境运行 composer install;因 vendor 含路径硬编码、平台相关构建逻辑及哈希校验,复制易致 Class not found、文件路径错误或安装失败。
直接迁移 vendor 目录不可靠,新服务器上 PHP 版本、扩展、OS 架构或文件权限稍有不同,就可能引发运行时错误或安装失败。真正安全的做法是只备份 composer.json 和 composer.lock,在新环境重装依赖。
为什么不能直接复制 vendor 目录
Composer 安装时会根据当前环境生成路径硬编码(如 autoloader 中的绝对路径)、执行平台相关脚本(如 ext-* 扩展的构建逻辑)、校验二进制包哈希值。常见报错包括:
-
Class not found(autoload 未生效,因路径缓存或生成逻辑不一致) -
Failed to open stream: No such file or directory(vendor/bin脚本头行指向旧 PHP 路径) -
Package is not installed correctly(某些包含 post-install-cmd,跳过则缺失资源或配置)
迁移前必须保留的两个文件
composer.json 和 composer.lock 是唯一可信源。前者声明意图,后者锁定精确版本与哈希。缺 lock 文件会导致新服务器拉取不同 minor/patch 版本,引发兼容性问题。
- 确认
composer.lock已提交到 Git —— 如果没提交,先在旧服务器运行composer update --lock再备份 - 检查
composer.json中的platform配置(如"php": "8.1.0"),确保与新服务器匹配;不匹配需手动调整或加--ignore-platform-reqs(不推荐) - 若项目含私有包(如 GitLab 私仓),确认新服务器已配置对应 auth token:
composer config -g http-basic.gitlab.example.com token username
在新服务器上正确还原依赖
不要用 composer install 以外的方式还原 —— 即便有完整 vendor,也应删掉并重来。