composer archive 命令自 Composer 2.2 起从未存在,官方未提供、源码无注册、文档已移除;正确做法是用 git archive 打包已提交源码,或先 composer install --no-dev 再系统命令打包完整运行结构。

composer archive 命令根本不存在
你敲 composer archive 必定报错:Command "archive" is not defined。这不是你装错了,是 Composer 官方自 2.2 起就从未提供过这个命令——它不在 composer list 里,源码里没注册 ArchiveCommand,文档也早已移除。网上所谓“教程”基本混用了三类东西:2018 年就废弃的第三方插件、把 git archive 记错成 Composer 命令、或项目里私装的 vendor/bin/composer-archive 工具。
真正能打出纯净源码包的只有 git archive
只要你用 Git 管理项目,且 .gitignore 里写了 vendor/、.env、node_modules/,git archive 就天然满足“只打已提交的源码”这一需求。它不依赖 Composer 状态,不关心 composer.lock 是否存在,也不需要改任何配置。
- 先确保
composer.json和composer.lock已git add并提交 - 打一个 tag:
git tag v1.2.0,再推送:git push origin v1.2.0 - 运行:
git archive --format=zip --output=myapp-1.2.0.zip v1.2.0 - 解压后结构干净:只有 Git 跟踪的文件,含
composer.json和composer.lock
对方收到后,只需 composer install --no-dev --prefer-dist,和标准流程完全一致。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
如果必须带 vendor 发布(开箱即用包)
这时你要打包的是已安装、已优化、无 dev 依赖的完整运行结构。composer archive 连边都沾不上,必须分两步走:
- 先本地执行:
composer install --no-dev --optimize-autoloader --no-interaction—— 确保vendor/里只有require中声明的包,且vendor/autoload.php已优化 - 再用系统命令打包:
tar -czf release.tar.gz . --exclude='.git' --exclude='tests' --exclude='docs' --exclude='.env' - 务必验证:
vendor/autoload.php存在、真实入口(如public/index.php)能加载、composer.lock在包内 - Windows 用户请用 Git Bash 或 WSL;CMD 自带
zip不支持-x排除,不可靠
别碰 composer.json 里的 archive 配置
即使你硬凑出一个能跑的 composer archive(比如装了旧插件),它的行为也极不可控:
- 默认排除
composer.lock,除非你在composer.json里写死"extra": {"archive-includes": ["composer.lock"]},拼错一个字母就失效 - 它只按
autoload和include-path打包(比如只打src/),但你的路由、迁移、配置文件往往不在 autoload 范围里,一打就丢 - 它不读
.gitignore,也不警告你vendor/没包含——假装自己是源码工具,实则语义模糊 - 如果你本地有
vendor/,它仍不会包含,但也不会报错,导致接收方composer install时版本漂移
真正关键的不是“怎么打包”,而是“哪些文件该进包、哪些不该进”。Git 的 .gitattributes + git archive 是唯一能让你对每一行代码的归属保持确定性的路径。

















