composer archive命令根本不存在,执行必报“command 'archive' is not defined”;正确做法是先运行composer install --no-dev --optimize-autoloader,再用git archive或zip打包源码,并通过.gitattributes排除敏感文件。

composer archive 命令根本不存在 —— 你执行它一定会报错 Command "archive" is not defined。这不是环境问题,是官方从未把它作为用户可用命令开放过。
为什么你敲 composer archive 总是失败
Composer 2.2+ 所有稳定版里都找不到这个命令:它不在 composer list 输出中,源码里没有公开注册的 ArchiveCommand 类,官方文档也早已移除所有相关说明。你看到的“教程”大概率混用了以下三类东西:
- 早已废弃的第三方插件(如
composer-archive-plugin),最后一次更新是 2018 年,不兼容 Composer 2.x - 把
git archive命令误记为 Composer 原生命令 - 项目里自己装了私有 bin 工具(比如
vendor/bin/composer-archive),不是 Composer 自带的
真正能打出「纯净源码包」的可靠方式:用 git archive + .gitattributes
这是最干净、可追溯、无需额外依赖的路径 —— 它只打包 git ls-files 能看到的文件,天然排除 .git/、vendor/、node_modules/ 和未提交内容。
- 先在项目根目录写好
.gitattributes,明确排除项:/tests export-ignore/docs export-ignore.env export-ignore*.log export-ignore - 确保当前工作区干净(
git status无未提交变更),打一个 tag(如v1.2.0) - 运行:
git archive --format=zip --output=myapp-1.2.0.zip v1.2.0
生成的 zip 包不含 vendor/,但含 composer.json 和 composer.lock —— 对方收到后只需在目标机运行 composer install --no-dev --optimize-autoloader 即可复现完整运行环境。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
如果对方没 PHP 环境,必须给「开箱即用」的包
这时你要打包的是已安装 + 已优化 + 无 dev 依赖的完整结构,archive 连边都沾不上。必须分两步走:
- 先本地跑:
composer install --no-dev --optimize-autoloader --prefer-dist(确保vendor/autoload.php可用且高效) - 再用系统命令打包整个目录:
zip -r myapp-prod.zip . -x ".git/*" "node_modules/*" "tests/*" ".env" - 务必确认
composer.lock在包内 —— 没它,目标机composer install无法锁定依赖版本
Windows 用户请用 Git Bash 或 WSL;原生 CMD 的 zip 不支持 -x 排除,不可靠。
别信脚本里藏的“一键打包”,陷阱在细节里
很多人在 composer.json 的 scripts 里塞 zip -r 或 tar -czf,看似省事,实际埋雷:
-
zip命令在 Windows cmd 中不可用,CI/CD 流程可能静默失败 - 排除语法(如
-x "tests/*")在 macOS/Linux/Git Bash 下行为不一致 - 脚本执行时不加载 autoloader,也没法做条件判断(比如“只对 tag 打包”)
- 漏掉
--optimize-autoloader导致部署后首次请求慢几秒,没人告诉你
最常被忽略的一点:composer archive 甚至不检查 vendor/ 目录是否存在 —— 它压根不是构建命令,只是个名字起错的幻觉。










