Composer项目打包必须执行composer install --no-dev --optimize-autoloader三步闭环,跳过则上线报错;官方无archive命令,所谓教程多混淆git archive或误用停更插件;打包须显式排除.env*等敏感路径并验证autoload.php可加载。

Composer 项目打包不是执行一个 archive 命令就能完事的流程,它本质是「先装对、再删净、最后压准」三步闭环。任何跳过 composer install --no-dev --optimize-autoloader 直接 zip 或 tar 的做法,上线后大概率报 Class not found 或加载超时。
为什么 composer archive 会报错:Command "archive" is not defined.
这不是你环境配置错了,是 Composer 官方从未发布该命令。所有稳定版本(包括 2.5+)的 composer list 输出里都找不到 archive;源码中也没有 ArchiveCommand 类注册。网上所谓教程,要么混淆了 git archive,要么误用了早已停更的第三方插件(如 composer-archive-plugin),在 CI/CD 或新服务器上必然失败。
真正可运行的打包流程:必须含 composer install --no-dev --optimize-autoloader
这一步决定打包后能否 require 'vendor/autoload.php' 成功。漏掉任一参数,后果明确:
-
--no-dev:不加则phpunit、symfony/debug-bundle等 dev-only 包全进vendor/,体积翻倍且可能触发线上调试入口 -
--optimize-autoloader:不加则自动加载器依赖运行时目录扫描,单次类加载从 0.05ms 拉到 1.2ms+,首页易超时 - 推荐补上
--classmap-authoritative:强制只走autoload_classmap.php,彻底关闭 PSR-4 fallback,性能更高,但要求所有类名能被静态发现
执行后,确认 vendor/composer/autoload_classmap.php 已生成,且内容非空。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
打包命令必须显式排除敏感路径,不能依赖 .gitattributes
.gitattributes 中的 export-ignore 只对 git archive 生效,对 zip -r 或 tar -czf 完全无效。常见遗漏项直接导致线上事故:
-
.env*:必须用-x ".env*"排除,否则密钥泄露 -
tests/、phpunit.xml、docker/:不加-x就打进包,增大体积且暴露测试结构 -
vendor/composer/installed.json:含全部包哈希与版本,是漏洞扫描的黄金靶标,必须删 - Windows 用户请用 Git Bash / WSL 运行,CMD 自带
zip不支持-x参数
示例(Linux/macOS):
zip -r myapp.zip . -x ".git/*" "tests/*" "phpunit.xml" ".env*" "docker-compose.yml" "Dockerfile"
验证比打包更重要:解压后第一行命令必须是 php -r "require 'vendor/autoload.php'; echo 'OK';"
别信“压缩完成”日志。必须在干净目录解压,然后立即执行该命令。失败原因通常只有两个:
-
vendor/autoload.php路径错误或未生成 → 漏了composer install --no-dev --optimize-autoloader -
.env被加载触发异常 → 打包时没排除.env*,或应用启动逻辑强依赖它
如果项目用了自定义 autoload-files,还要额外验证这些文件是否在包内且路径可达——它们不会被 --optimize-autoloader 自动处理。

















