vendor目录打包需先执行composer install --no-dev --optimize-autoloader,排除开发依赖与非运行文件,确保composer.lock一致及php版本匹配,并验证autoload生效。

composer install 和 composer dump-autoload 不能打包 vendor
直接运行 composer install 或 composer dump-autoload 不会生成可分发的“打包文件”,它们只是本地构建依赖或重写自动加载映射。真正要提取 vendor 目录用于部署或离线分发,得靠手动归档 + 正确配置。
vendor 打包前必须先执行 composer install --no-dev
否则打包进去的会包含 phpunit、phpstan 等开发依赖,体积大、有安全风险、还可能因环境差异报错。
-
composer install --no-dev --optimize-autoloader是标准操作:跳过require-dev,同时生成优化后的vendor/autoload.php - 务必确认
composer.lock已提交且与目标环境一致,否则--no-dev可能漏掉某些间接依赖 - 若项目用了
platform配置(如强制 PHP 版本),打包机和目标机的 PHP 版本必须匹配,否则autoload_static.php生成失败
打包时忽略 vendor/.git、vendor/bin/.htaccess 等非运行文件
这些文件对运行无用,却占空间、引权限问题,甚至在某些 Linux 环境下触发 SELinux 报错。
- 推荐用
tar --exclude='vendor/.git' --exclude='vendor/bin/.htaccess' -czf myapp-vendor.tgz vendor/ - Windows 用户可用 7-Zip 命令行:
7z a -xr!vendor\.git -xr!vendor\bin\.htaccess myapp-vendor.7z vendor\ - 别用 GUI 压缩工具直接拖 vendor 文件夹——容易漏掉隐藏文件或改错权限位
部署后必须验证 autoload 是否生效,而非只看 vendor 是否存在
常见错误是 vendor 解压成功但 Class not found,原因通常是:composer install 没跑完、autoload.php 路径写错、或用了 classmap 但没加 --classmap-authoritative。
- 上线后第一件事:运行
php -r "require 'vendor/autoload.php'; echo 'OK';" - 如果用的是 PSR-4 自动加载,检查
vendor/composer/autoload_psr4.php是否包含你的命名空间映射 - 生产环境建议加
--classmap-authoritative参数,避免运行时扫描文件,也防止未声明类被意外加载
打包不是复制粘贴就完事,vendor 目录里藏着 autoloader 的生成逻辑、平台适配判断、甚至扩展 ABI 兼容性检查。少走一步,上线就报错。










