Composer没有archive命令,执行composer archive --format=zip必报“Command 'archive' is not defined”;正确做法是先运行composer install --no-dev --optimize-autoloader,再用系统命令如zip -r或tar -czf手动打包并显式排除无关文件。

composer archive --format=zip 为什么报错
因为 Composer 官方自 2.0 起就**没有 archive 命令**,更不存在 --format 参数。你执行 composer archive --format=zip 时看到的 Command "archive" is not defined 不是配置问题,是命令根本不存在。
所有能跑通 archive 的情况,都依赖已弃用或不兼容的第三方插件(比如 hirak/prestissimo),而该插件在 Composer 2.2+ 中因 Composer\Package\Archiver\TarArchiver 类被移除而彻底失效。
- 官方
composer list里查不到archive -
composer.json里写"archive-format": "tar"或"archive": {...}字段,原生命令完全忽略 - ~/.composer/config.json 中设置也无效
想打 .tar.gz 包,别碰 --format,用系统命令组合
真正稳定、跨 Composer 版本(2.5+)、不依赖插件的做法,是先让 composer install 准备好运行环境,再用 tar 或 zip 手动打包。
例如生成含优化 vendor 的生产包:
composer install --no-dev --optimize-autoloader --prefer-dist<br>tar -czf myapp-1.2.0.tar.gz --exclude=".git" --exclude="node_modules" --exclude="vendor/bin" --exclude="*/tests" .
注意:--exclude 是 tar 自己的参数,路径匹配基于当前目录,不支持 ** 通配符;vendor/bin 和 */tests 这类写法必须准确,少个 / 就可能漏排除。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
--no-dev确保 vendor 里没 phpunit、phpstan 等开发依赖 -
--optimize-autoloader生成 classmap,避免 runtime 文件扫描开销 -
--prefer-dist下载预编译的 .tar.gz 包,比 source 更快更小
archive.exclude 在哪写、怎么写才生效
archive.exclude 只在某些第三方插件中起作用,且规则非常受限:它只支持 * 和 ?,不支持 **;路径必须以 / 开头(如 /tests),写成 tests/ 或 tests/* 都不匹配。
但更关键的是——**原生命令根本不读这个字段**。你把它写进 composer.json 顶层,只是徒增维护负担,对打包行为零影响。
- 正确写法(仅对旧插件有效):
"archive": { "exclude": ["/tests", "/docs", "/.env"] } - 错误写法:
"archive": { "exclude": ["tests/", "docs/**", ".env"] } - 别指望它替代
.gitattributes:敏感文件(如.env)应靠.gitattributes的export-ignore控制,这才是 Git 归档层面的可靠机制
真正要分发可运行代码,别只打包源码
很多人误以为 archive 是生产部署的终点,其实它连起点都算不上。一个可运行的分发包必须包含:
- 已执行
composer install --no-dev --optimize-autoloader的vendor/ - 有效的
vendor/autoload.php(classmap 已生成) -
composer.lock—— 否则目标机composer install无法复现依赖 - 排除掉
.git/、未提交文件、node_modules/等非必要内容
所以最稳妥流程是:git archive --format=zip --output=dist/app.zip HEAD(天然排除 .git 和未提交文件) + 确保 composer.lock 在 repo 中 + 提前运行好 composer install。把 archive 当主力工具,反而会绕远路、踩坑、丢关键文件。

















