composer archive 不支持直接指定输出文件名,其默认生成 vendor-name-package-name-version.zip(或.tar),设计定位是快速打包项目快照而非定制化发布。

composer archive 命令不支持直接指定输出文件名
执行 composer archive 时,它默认生成的归档文件名是 vendor-name-package-name-version.zip(或 .tar),没有内置参数让你用 --filename 或类似选项覆盖。这不是遗漏,而是设计如此——该命令定位是快速打包当前项目用于分发快照,不是构建可定制发布的制品。
绕过限制:用 --format + shell 重命名最可靠
虽然不能改名,但可以控制格式并立即重命名。关键点在于:composer archive 的 --format 只决定压缩类型(zip 或 tar),不干预文件名生成逻辑;而它的输出路径固定为当前目录,且**总是覆盖同名文件**。
- 先运行
composer archive --format=zip,得到类似myorg-myapp-1.2.3.zip - 立刻用 shell 重命名:
mv myorg-myapp-1.2.3.zip myapp-release-v1.2.3.zip - 如果想一行搞定(zsh/bash):
composer archive --format=zip && mv *.zip myapp-dist.zip(注意通配符风险,建议加ls -t | head -n1精准取最新)
更健壮的做法:跳过 composer archive,直接用 zip/tar
当需要稳定、可复现、带自定义前缀/时间戳的归档时,composer archive 反而成了累赘。它会打包整个项目目录(含 vendor/、node_modules/ 等),而你真正要发布的往往只是源码部分。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 排除无关目录:
zip -r myapp-v1.2.3.zip . -x "vendor/*" "node_modules/*" ".git/*" "composer.lock" - 只打包关键结构(推荐):
tar -czf myapp-dist.tgz --exclude='vendor' --exclude='tests' --exclude='.git' . - 配合
composer install --no-dev --optimize-autoloader后再打包,能确保vendor/是最小可用状态
容易踩的坑:archive 不校验版本字段,但 Packagist 会
如果你导出的 zip 是为了上传到 Packagist 或私有仓库,注意:composer archive 完全不读取 composer.json 里的 version 字段,它只从当前 Git tag 或分支名提取版本。而 Packagist 要求 composer.json 中的 name 和 version 必须与 tag 严格匹配(如 tag v1.2.3 → composer.json 中不能写 "version": "1.2.3",应留空或删掉该字段)。
真正卡住的地方不在文件名,而在归档内容里 composer.json 是否合规、Git tag 是否推送到远程、以及 Packagist 是否配置了 GitHub webhook——这三个点任一失败,都会导致 composer require 报 Could not find package,和你用什么命令打包无关。










