composer 没有 archive 命令,执行必报错;正确做法是先运行 composer install --no-dev --optimize-autoloader,再用 git archive 或 zip 打包源码,确保含 composer.lock 且排除敏感文件。

Composer 没有 archive 命令,所有声称能直接执行 composer archive 的操作都会报错:Command "archive" is not defined。 这不是你装错了,也不是版本低——它早在 Composer 2.0 就被彻底移除,官方文档也已删除全部相关说明。真要导出可部署的项目包,必须绕过这个“幻影命令”,走可控、可验证的两步路径。
为什么 composer archive 一定失败
该命令在 Composer 2.2+ 所有稳定版中均不存在。它的 ArchiveCommand 类是内部隐藏类,仅被 Packagist 或实验性 composer pack(2.5+)间接调用,不接受用户直接调用。你看到的成功案例,大概率是项目里装了第三方 bin 工具(如 vendor/bin/composer-archive),不是 Composer 自带功能。
- 执行
composer archive必报错,且不会因升级 Composer 而恢复 - 所谓“教程”多混淆了
git archive、系统zip或自定义脚本 - 即使强行找旧版(1.x 后期),它也只打包源码,不含
vendor/,无法直接运行
生产可用的归档必须先跑 composer install --no-dev --optimize-autoloader
这是不可跳过的前提:没有这一步,vendor/autoload.php 不会生成优化后的映射表,打包后 require 失败或加载极慢;dev 依赖也会混入,体积膨胀、安全风险上升。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
--no-dev:排除phpunit、php-cs-fixer等开发依赖,减小体积 -
--optimize-autoloader:生成vendor/composer/autoload_classmap.php,避免运行时扫描 -
--prefer-dist:优先下载压缩包而非 Git 克隆,更快更稳定 - 别漏掉
composer.lock:它必须随包一起发布,否则目标环境composer install无法复现依赖
用 git archive 打源码包,比手动 zip 更干净
如果你项目用 Git 管理,git archive 是最接近“真实发布快照”的方式——它只打包当前 commit 的 tracked 文件,天然不含 .git/、node_modules/、未提交的 .env。
- 先配
.gitattributes控制内容:/tests export-ignore、/docs export-ignore、/.env export-ignore - 运行:
git archive --format=zip --output=myapp-v1.0.zip HEAD - 注意:此包不含
vendor/,部署时需在目标机上再跑一次composer install --no-dev - Windows 用户请用 Git Bash 或 WSL;CMD 自带
zip不支持-x排除,不可靠
自动化打包建议写进 composer.json 的 scripts
把逻辑收束到 composer.json,比依赖未知第三方工具更透明、更易调试。例如:
"scripts": {
"package": [
"@composer install --no-dev --optimize-autoloader --quiet",
"zip -r myapp-$(date -I).zip . -x \"*/.git/*\" -x \"tests/*\" -x \"phpunit.xml\" -x \"*.md\""
}
然后执行:composer run package(Composer 2.5+)或 composer run-script package(旧版)。
- 不要在脚本里
rm -rf vendor或删.git,会破坏本地开发环境 - 别用
$(git describe --tags)替代date,若没打 tag,会报错或返回 dirty 输出 - 最容易被忽略的是:打包后没验证
vendor/autoload.php是否能正常require,以及是否误打了本地配置文件










