跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

composer怎么将开发机的vendor同步到服务器?

不能直接同步 vendor 目录,因环境差异会导致二进制扩展失效、Class not found 等错误;正确做法是在服务器运行 composer install,确保 PHP 版本、扩展匹配,并上传 composer.json 和 composer.lock。 直接同步
vendor
目录是危险且不可靠的,别这么做。 为什么不能直接 rsync / scp
vendor
本地和服务器的环境差异(PHP 版本、扩展、OS 架构、
composer.json
锁定精度)会导致
vendor
中某些包的二进制扩展(如
ext-swoole
、
ext-protobuf
)或平台相关依赖(如
symfony/flex
的脚本)直接失效。你看到的
Class not found
或
undefined symbol
错误,八成是这么来的。
composer.lock
记录的是 hash 和版本,不是构建结果;不同机器上
install
出的
vendor
可能完全不同 本地开发可能用了
--dev
,但线上不该装
phpunit
或
laravel/pint
vendor/bin
下的可执行文件路径、shebang 行可能硬编码了本地 PHP 路径 正确做法:在服务器上运行
composer install
核心原则:让目标环境自己生成
vendor
,而不是搬运。这要求服务器具备基础构建能力,但远比“同步失败后排查 2 小时”划算。 Composer 2.9.6 Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。 下载 确保服务器已安装匹配的 PHP 版本和必要扩展(
openssl
、
mbstring
、
json
等) 上传
composer.json
和
composer.lock
(必须一起传,缺一不可) 用
composer install --no-dev --optimize-autoloader --no-interaction
部署 如果服务器无法访问 packagist(比如内网),提前用
composer install --prefer-dist --no-dev
在本地打包好
vendor
并上传——但这仍是妥协方案,只适用于完全隔离环境 常见卡点与绕过方式 部署时最常卡在权限、内存、网络三块,不是 Composer 本身的问题,而是执行环境没配好。
PHP Fatal error: Allowed memory size of XXX bytes exhausted
→ 在命令前加
php -d memory_limit=-1
,或改
php.ini
Could not open input file: composer.phar
→ 别用全局
composer
命令,下载最新
composer.phar
放项目根目录,用
php composer.phar install
file_put_contents(./composer.lock): failed to open stream: Permission denied
→ 检查当前用户对
composer.lock
所在目录是否有写权限,别用
root
运行,也别让 web 用户拥有写权限 国内服务器拉包慢 → 配置镜像源:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
(注意该镜像已停,换
https://mirrors.aliyun.com/composer/
) 真正麻烦的从来不是命令怎么敲,而是搞不清哪台机器该装什么扩展、
composer.lock
是否被意外修改、以及上线前忘了清空
bootstrap/cache/config.php
这类缓存——这些细节不写进部署脚本,早晚出事。

相关文章