composer原生命令不支持archive-format配置,可靠方式是用composer install配合系统tar命令打包;archive命令已弃用且仅输出.zip。

直接改 archive-format 不生效,因为 Composer 的打包行为由 archive 命令控制,且默认不读取全局配置中的该字段。
composer archive 命令不认 global config 里的 archive-format
很多人在 ~/.composer/config.json 或项目 composer.json 里加了 "archive-format": "tar",但运行 composer archive 依然输出 .zip —— 这是因为该配置项仅被某些第三方插件(如 composer-archiver)识别,原生命令完全忽略它。
-
composer archive是一个实验性命令,本身不支持--format参数,也不读取archive-format配置 - 真正能生成
.tar的只有composer install --no-dev --prefer-dist --optimize-autoloader后手动打包vendor/,或借助脚本 - 如果你用的是 Composer 2.5+,
archive命令已被标记为 deprecated,官方明确不维护
用 composer install + tar 命令组合生成 tar 包
这是目前最可靠、兼容性最好、且不依赖插件的方式:先让 Composer 下载 dist 包(通常是 .tar.gz 形式),再用系统 tar 打包整个项目目录或 vendor/。
- 确保
composer.json中没有"type": "project"以外的干扰项(比如自定义 installer),否则vendor/结构可能异常 - 运行
composer install --no-dev --prefer-dist --optimize-autoloader --no-scripts,避免脚本干扰文件结构 - 然后执行:
tar -czf myapp.tar.gz --exclude="node_modules" --exclude=".git" . - 如果只要
vendor/:先rm -rf vendor/composer/autoload_*.php(避免重复 autoload 文件),再tar -cf vendor.tar vendor/
用 composer-archive-plugin 插件(需谨慎)
这个第三方插件(hirak/prestissimo 作者维护)能启用 archive-format 配置,但它只支持 Composer 1.x,且在 Composer 2.2+ 上会报错 Class Composer\Package\Archiver\TarArchiver not found。
- 安装方式:
composer global require hirak/prestissimo:^0.3(注意不是最新版) - 配置项必须写在项目级
composer.json的config下:"archive-format": "tar" - 运行
composer archive --format=tar才生效;不加--format参数时仍默认 zip - 插件对 PHP 8.2+ 兼容性差,
TarArchiver类已从 Composer 2 移除,强行启用会导致class not found
真正要稳定出 .tar,别指望配置项自动生效。要么自己写个 make-tar.sh 脚本封装 composer install 和 tar,要么接受 .zip 是 Composer 原生命令的事实 —— 它压根没打算支持 tar 输出。










