Composer 没有内置 archive 命令,其核心功能仅为依赖管理;需归档时应使用 git archive 或系统压缩命令,发布包则依赖 Git tag 和 Packagist 自动抓取。

Composer 的 archive 命令本身并不存在——Composer 没有内置的 archive 子命令。你可能混淆了 Composer 的功能,或者看到的是第三方插件、自定义脚本,甚至误记为其他工具(如 git archive 或 zip 命令)。
Composer 不提供打包归档功能
Composer 的核心职责是依赖管理:安装、更新、卸载 PHP 包,生成自动加载器,解析依赖图。它不负责项目源码的压缩、打包或发布归档。
- 运行
composer archive会提示Command "archive" is not defined -
composer help列出的所有命令中没有archive - 官方文档(getcomposer.org)也从未定义该命令
实际可用的归档替代方案
若需将当前项目(含依赖或不含依赖)打包为 zip/tar 文件,推荐以下可靠做法:
-
仅打包自身代码(推荐发布前使用):用
git archive导出干净源码(排除 vendor、.git、.env 等)git archive --format=zip --output=myapp-v1.0.zip HEAD -
包含已安装依赖(适合离线部署):先运行
composer install --no-dev --optimize-autoloader,再用系统命令打包:zip -r myapp-with-vendor.zip . -x "node_modules/*" ".git/*" "vendor/composer/installed.json" - 借助 Composer 插件(谨慎选用):如 hirak/php-archive 是一个第三方插件,需手动 require 并配置,但非官方支持,维护性有限
发布包时的正确归档逻辑
如果你目标是向 Packagist 发布一个可被他人 composer require 的包,关键不是“打包”,而是:
- 确保
composer.json正确声明name、version、autoload等字段 - 打 Git tag(如
v1.0.0),Packagist 会自动抓取该 tag 对应的代码快照 - Packagist 后台本质就是用
git archive或等效方式提取 tagged commit 的文件
小技巧:快速生成最小化发布包
写个简易 shell 脚本,避免遗漏:
#!/bin/sh # build-dist.sh rm -f myapp-dist.zip git archive --format=zip --output=myapp-dist.zip \ --prefix="myapp/" \ HEAD \ -- . \ --exclude=".git" \ --exclude="vendor" \ --exclude="tests" \ --exclude="phpunit.xml" \ --exclude=".env.example"
执行 sh build-dist.sh 即得轻量、可分发的 zip 包。










