composer archive 命令不存在,官方从未发布;composer 2.5+ 仅有实验性 pack 命令;可靠打包需手动执行 composer install --no-dev --optimize-autoloader 后用 git archive 或 zip -r 显式排除敏感文件。

composer archive 命令根本不存在
执行 composer archive 会直接报错:Command "archive" is not defined.。这不是你操作错了,而是 Composer 官方从没把 archive 作为公开命令发布。所有声称“composer archive --format=zip 就能打包项目”的教程,要么混淆了内部命令(仅 Packagist 使用),要么误把 composer pack(2.5+ 实验性)或自定义脚本当成了标准功能。
为什么有些机器上似乎能运行 composer archive?
极少数情况是本地装了第三方插件(如 hirak/prestissimo 旧版、或自定义 composer-plugin),或者误用了别名脚本。但这些行为不可移植、不兼容 CI/CD、也不受 Composer 维护。真实环境里——尤其是 Docker 构建、GitHub Actions 或新服务器——它必然失败。
- Composer 2.4 及更早版本:无
archive命令 - Composer 2.5+:有实验性
pack命令,但不是archive - 官方文档、
composer list输出、源码中均查不到ArchiveCommand的公开注册
真正可靠、可复现的打包流程
生产部署要的是“解压即运行”,核心是两件事:依赖精简 + 源码干净。不能依赖模糊的“archive 命令”,必须手动控制每一步。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先确保 vendor 状态正确:
composer install --no-dev --optimize-autoloader—— 这步生成扁平化 autoload map,去掉 dev-only 包,且让require加载更快 - 用
git archive打源码(推荐):git archive --format=zip --output=release.zip HEAD—— 它天然排除.git、node_modules等,且只打当前 commit,语义清晰 - 若不用 Git,则用系统 zip/tar,并显式排除:
zip -r release.zip . -x ".git/*" "tests/*" "phpunit.xml" ".env" "docker-compose.yml" - 务必验证:解压后进目录,运行
php -r "require 'vendor/autoload.php'; echo 'OK';"—— 这比任何“打包成功”提示都管用
别碰 .gitattributes 里的 export-ignore 当作救命稻草
.gitattributes 中的 export-ignore 规则只对 git archive 生效,对任何 zip -r 或 tar -czf 都无效。而且它容易漏配(比如忘了 .env.example),也难调试。与其花时间写一堆通配符,不如在打包命令里用 -x 明确列出要排除的路径——看得见、改得快、CI 里一跑就知对错。
最容易被跳过的其实是 .env 文件:它不会被 git archive 打进去(通常已 gitignored),但如果你用 zip -r .,它就在压缩包里,上线后直接覆盖线上配置,炸掉服务。










