composer archive 命令因设计定位局限且缺乏生产级支持,早在 Composer 1.x 后期被废弃、2.0 版本正式移除;官方推荐用 composer install --no-dev --optimize-autoloader 配合系统归档工具完成可靠部署。

composer archive 命令在现代 Composer 版本中已被移除,无法直接使用。
为什么 composer archive 找不到了?
该命令早在 Composer 1.x 后期就被标记为废弃(deprecated),并在 Composer 2.0 正式删除。官方明确表示它“从未被设计为生产级归档工具”,仅用于内部测试或极简打包场景,缺乏对自动加载、依赖路径、排除规则等关键能力的支持。
- 执行
composer archive会报错:Command "archive" is not defined. - Composer 官方文档已完全移除该命令说明
- 所有稳定版本(Composer 2.2+)均不含此子命令
替代方案:用 composer install --no-dev --optimize-autoloader 配合系统归档
生产环境项目归档的正确流程是先精简依赖和自动加载,再用系统工具打包。这是最可靠、可复现、符合部署规范的做法。
- 运行
composer install --no-dev --optimize-autoloader --prefer-dist确保只装生产依赖、生成优化后的vendor/autoload.php - 手动清理不需要发布的文件(如
.git、tests/、docker-compose.yml等),推荐用.gitattributes或.export-ignore控制 - 用系统命令归档:
git archive --format=zip --output=project-v1.0.zip HEAD
(需提前配置.gitattributes中的export-ignore规则) - 或纯文件方式:
zip -r project-v1.0.zip . -x "*.git*" -x "tests/*" -x "phpunit.xml" -x "composer.lock"
(注意:不要排除composer.lock,它必须随归档发布)
如果非要模拟旧版 archive 行为,得自己写脚本
某些遗留 CI 流程里还残留着调用 composer archive 的 shell 脚本。此时不能指望恢复命令,而应替换为轻量等效逻辑:
- 核心动作只有三步:安装生产依赖 → 清理开发文件 → 打 zip 包
- 可封装成 Bash 函数:
composer_archive() { local out="${1:-project.zip}" composer install --no-dev --optimize-autoloader --quiet zip -q -r "$out" . -x "*/.git/*" -x "*/node_modules/*" -x "*/vendor/bin/*" -x "phpunit.xml" -x "phpstan.neon" } - 注意:
vendor/bin下的二进制(如php-cs-fixer)不应进入生产包,但vendor/autoload.php和vendor/composer/必须保留
真正容易被忽略的是 autoload.php 的生成时机——必须在 install 后触发,且不能靠 dump-autoload 补救,因为后者不重建 vendor/composer/autoload_*.php 文件。打包前务必确认 vendor/autoload.php 存在且可执行。










