Composer 不提供“自动归档至私有制品库”能力,其 archive 命令自 2.0 起已被彻底移除;可行方案是三步链路:先执行 composer install --no-dev --optimize-autoloader,再用 git archive 生成源码包,最后由插件调用 curl 或 cp 上传至制品库。

Composer 本身不提供“自动归档至私有制品库”的能力,composer archive 命令早已被移除,任何试图用它实现自动化归档的方案都会失败——这不是配置问题,是功能不存在。
为什么你找不到 composer archive 命令
这个命令在 Composer 2.0 中已被彻底删除,所有稳定版本(包括当前 2026 年的 2.5+)都不再支持。你看到的文档或脚本里出现它,大概率是:
- 混淆了
git archive或第三方 bin 工具(如vendor/bin/composer-archive) - 误用了 Packagist 内部调用的隐藏类
ArchiveCommand(用户不可见、不可调用) - 参考了已过时的 Composer 1.x 实验性行为(当时也只打包源码,不含
vendor/)
repositories 配置错层,插件根本没机会运行
很多团队想写自研插件监听 post-install-cmd 或 post-autoload-dump 来触发归档,但前提是包能正常安装。而绝大多数失败卡在第一步:repositories 没配对。
- 私有包必须在项目级
composer.json的repositories数组中显式声明,类型为"vcs"或"composer",不能靠插件“动态注册” - 如果
type写成"git"或"package",Composer 直接忽略该源,插件连install都收不到事件 - URL 指向 GitHub tag 页面(如
https://github.com/org/pkg/tree/v1.2.3)而非仓库根(https://github.com/org/pkg),插件拿到的是 404,不是包元数据
真正可行的归档链路:分三步,插件只负责最后一步
所谓“自动归档”,本质是把 composer install --no-dev --optimize-autoloader 后的产物,加上源码快照,推到私有制品库(如 Nexus、Artifactory、或 Satis 的 dist/ 目录)。插件只能介入最后这步,且必须依赖外部工具。
- 第一步:确保
vendor/已正确安装并优化 —— 这步由 Composer 原生命令完成,插件无法替代 - 第二步:生成源码归档 —— 推荐用
git archive --format=zip --output=dist/pkg-v1.2.3.zip HEAD,配合.gitattributes过滤vendor/、.env等 - 第三步:上传到制品库 —— 插件可调用
curl -X PUT或npm publish类似逻辑,但需提前配置好目标地址、认证 Token 和路径规则;Satis 用户则直接cp到web/dist/并重跑php bin/satis build
最容易被忽略的点:插件无法绕过 auth.json 权限校验。即使你写了完美插件,若 auth.json 权限不是 600,或内容格式错(比如把 github-oauth 写成 http-basic),前面所有步骤都卡在 clone 阶段,归档无从谈起。


















