不能直接将vendor目录提交至git,因其含symlink、.gitignore冗余文件、平台相关扩展及版本不一致的autoload文件,导致ci/cd还原失败、class not found等错误;正确做法是仅提交composer.json和composer.lock,离线时用composer install --no-dev --prefer-dist --optimize-autoloader安装。

为什么不能直接把 vendor 目录塞进 Git?
很多团队在离线环境部署时,第一反应是 git add vendor,结果很快遇到问题:Composer 包含大量 symlink、.gitignore 冗余文件、平台相关扩展(比如 ext-redis 编译产物),且不同 PHP 版本下 vendor 中的 composer/autoload_classmap.php 或 vendor/composer/installed.json 可能行为不一致。Git 会记录文件权限和符号链接,而某些 CI/CD 环境或 Windows 开发机还原时会出错,导致 Class not found 或 require(): failed to open stream。
离线部署必须保留 composer.lock,但禁止提交 vendor
正确做法是只提交 composer.json 和 composer.lock,在离线机器上用 composer install --no-dev --prefer-dist --optimize-autoloader 安装。前提是提前把所有依赖包缓存好:
- 在有网机器上运行
composer install后,复制整个~/.composer/cache目录(Linux/macOS)或%LOCALAPPDATA%\Composer\cache(Windows)到离线机对应路径 - 确保离线机 PHP 版本、扩展(如
openssl、zlib)与构建机一致,否则--prefer-dist下载的 zip 包解压失败 - 若用私有 Packagist,需在
composer.json中显式配置repositories,并把私有包的 dist ZIP 手动放入缓存的dist/子目录,结构要严格匹配vendor/name/package/version-hash.zip
git archive + tar 打包比 git clone 更适合离线分发
离线部署本质是「可重现的静态快照」,不是代码同步。用 git archive 能排除 .git、.env、本地调试脚本等干扰项:
git archive --format=tar --output=app-release.tar HEAD tar -rf app-release.tar vendor/ # 注意:仅在确认 vendor 已预装且校验无误后追加 gzip app-release.tar
关键点:
- 不要用
git clone --depth=1,它仍依赖 Git 元数据,且离线机可能没装 Git - 如果真要带
vendor,必须在打包前运行composer install --no-dev --optimize-autoloader并验证php -l vendor/autoload.php不报错 - 打包后建议用
sha256sum记录哈希,在离线机校验完整性,避免 tar 截断或传输损坏
PHP 内置服务器无法替代真实 Web 服务器做离线验证
用 php -S localhost:8000 router.php 启动只是临时调试,它不解析 .htaccess、不支持 OPcache 预热、无法模拟 Nginx 的 try_files 行为。离线环境最接近生产的是:
- 用 Docker:提前在有网环境
docker build镜像,docker save -o php-app.tar image-name导出,离线机docker load - 用 systemd + PHP-FPM:把
php-fpm.conf、www.conf、nginx.conf(或 Apachevhost)全写死路径,指向本地/opt/myapp,避免任何网络 DNS 解析 - 检查
phpinfo()输出中disable_functions是否禁用了exec、shell_exec——有些离线环境出于安全会关掉,影响 Laravel 的php artisan config:cache等命令
真正麻烦的从来不是 vendor 放哪,而是 autoloader 加载顺序、OPcache 文件路径硬编码、以及 .env 中的数据库密码在离线机是否被正确注入——这些细节一旦漏掉,错误日志里只会显示白屏或 500 Internal Server Error,没有更多线索。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











