Composer 没有 archive 命令,所谓“composer archive”执行必报错“Command 'archive' is not defined”;官方从未提供该功能,所有相关教程均混淆了 git archive、过时插件或实验性 pack 命令,可靠打包必须先运行 composer install --no-dev --optimize-autoloader,再用 zip 或 git archive 手动归档并显式排除敏感文件。

Composer 没有 archive 路径命令,也不支持用 composer archive 或类似参数指定打包输出位置。 它的 archive 命令只生成 ZIP/TAR 包,默认保存在当前工作目录,且不接受目标路径参数——这是硬编码行为,不是配置遗漏。
为什么 composer archive 不接受 --output 或 -d 参数
Composer 的 archive 子命令设计初衷是快速打包当前项目(含 vendor/),不提供路径控制能力。源码中未定义任何接收输出路径的选项,所有尝试如 composer archive --output=dist/app.zip 或 composer archive -d dist/ 都会报错:Unrecognized option "--output" 或被静默忽略。
-
composer archive只认--format、--without-dev、--no-dev等开关,不支持路径类参数 - 它始终把包写入当前 shell 所在目录(即
getcwd()返回路径),和composer.json位置无关 - 即使设置了
COMPOSER_VENDOR_DIR,也只影响vendor/内容,不影响 ZIP 文件落盘位置
如何让 archive 文件生成到指定目录
唯一可靠方式是**先切换工作目录,再执行 archive**。因为输出路径由执行时的当前路径决定,不是由项目结构或配置驱动。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:运行
cd /path/to/output && composer archive --format=zip --file=myapp - Windows PowerShell:运行
Set-Location D:\dist; composer archive --format=zip --file=myapp - 脚本中务必确保目标目录存在且可写,否则会因
mkdir失败而中断 - 不要依赖
composer.json中的archive相关字段(如extra.archive)——Composer 不读取这些
archive 生成的文件名和路径怎么算
文件名由 --file 参数 + --format 后缀拼接,路径就是执行命令时的当前目录。例如:
cd /tmp/deploy composer archive --format=tar --file=release-1.2.0
结果是 /tmp/deploy/release-1.2.0.tar。没加 --file 就用 composer.json 中的 name 字段值(如 acme/app → acme-app.tar)。
-
--file值不能含路径分隔符(/或\),否则报错:The --file option must not contain directory separators - 想存到子目录?必须
cd进去,不能靠--file=dist/release.zip - CI/CD 中建议用
mkdir -p $ARTIFACTS_DIR && cd $ARTIFACTS_DIR && composer archive ...显式控制
真正难的不是生成包,而是确保打包内容准确——archive 默认包含 vendor/,但若你改过 COMPOSER_VENDOR_DIR,它仍会按实际 vendor/ 目录结构打包,不会自动映射路径别名。这点常被忽略,导致部署时解压后 autoload 失败。

















