Composer archive命令根本不存在,执行必报错“Command 'archive' is not defined”;它从未被Composer官方内置,所有可用案例均源于第三方插件或自定义脚本,可靠打包应使用composer install --no-dev --optimize-autoloader配合git archive或zip手动归档。

composer archive 命令根本不存在
执行 composer archive 会直接报错:Command "archive" is not defined。Composer 官方从没内置这个命令——所有声称它存在的教程,基本混淆了 git archive、第三方插件(如 hirak/php-archive)或用户自定义脚本。
你看到的“默认打包 src/”“支持 --format=zip”等描述,多数来自误传或已失效的插件行为。Composer 的核心职责只有依赖管理:解析 composer.json、安装 vendor/、生成自动加载器。它不读 .gitattributes,不处理压缩,也不生成可部署包。
- 运行
composer help,列表里没有archive - 官方文档(getcomposer.org)从未定义该命令
- Composer 2.5+ 的
composer run也不能触发不存在的子命令
为什么你“用过” composer archive?
大概率你装了第三方插件,比如 hirak/php-archive,或者项目里定义了自定义 script:
-
"scripts": { "archive": "zip -r dist/app.zip . -x 'vendor/*' '.git/*'" }—— 这本质是调用系统zip命令 - 插件可能劫持了
composer archive,但行为完全取决于插件实现,不受 Composer 控制 - 插件通常不处理
composer.lock包含逻辑、autoload重写、或 vendor 优化,容易漏关键文件
一旦插件被移除或 Composer 升级,composer archive 立刻失效,而你却以为这是“标准功能”。
真正可靠、可复现的打包方式
不要依赖不存在的命令。按场景选真实可用方案:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 只打包源码(发布前快照):
git archive --format=zip --output=release-1.0.0.zip HEAD,天然排除.git/、vendor/、node_modules/ - 打包含 vendor 的可部署包:
composer install --no-dev --optimize-autoloader && zip -r deploy.zip . -x "tests/*" ".git/*" "node_modules/*" - 需要自动版本号:
git describe --tags --abbrev=0或读取composer.json中的version字段(用jq '.version')再拼接文件名 - 想统一流程?在
composer.json的scripts里写明命令,用composer run deploy触发,而不是虚构archive
注意:composer.lock 必须包含在部署包中,否则 composer install 在目标环境无法复现依赖;而 git archive 默认不包含它,得手动加回或改用 cp composer.lock dist/ && zip。
archive-includes 配置根本不会生效
如果你在 composer.json 里写了 "extra": {"archive-includes": ["config/**"]},那它什么都不会做——因为没有命令读它。这个字段只在极少数第三方插件里被硬编码支持,不是 Composer 标准行为。
同理:archive.exclude、.gitattributes 中的 export-ignore、--version 参数……全都不起作用,除非你明确用了某个插件并确认其文档支持这些选项。
别把配置写进 composer.json 就当它“已生效”。验证方式只有一个:删掉插件,清空 vendor/,再跑一遍命令——如果还成功,说明你根本没用 Composer。

















