Composer归档命令怎么用_Composer archive打包项目教程【打包】

1次阅读

composer 没有 archive 内置命令,所谓教程多为混淆 git archive 或自定义脚本;正确做法是结合 composer install –no-dev –optimize-autoloader、git archive(推荐)或自定义 scripts 打包,并通过 .gitattributes 和 autoload 优化确保部署可靠性。

Composer归档命令怎么用_Composer archive打包项目教程【打包】

composer archive 命令根本不存在

Composer 没有 archive 这个内置命令,官方文档里查不到,执行 composer archive 会直接报错:Command "archive" is not defined.。你看到的所谓“教程”,基本是把 git archivezip 手动打包,或者用自定义脚本冒充 Composer 功能。

真正能打包项目的 Composer 方式只有 dump-autoload + 自定义脚本

Composer 本身只管依赖安装和自动加载,不负责项目归档。但你可以借助它的钩子机制,在生成可部署包时自动清理无关文件:

  • composer install --no-dev --optimize-autoloader:确保 vendor/ 只含生产依赖,且 autoloader 最小化
  • composer.json"scripts" 里加一个打包任务,比如:
    "scripts": {   "archive": "zip -r myapp-$(date +%Y%m%d).zip . -x "node_modules/*" "vendor/composer/autoload_classmap.php" "tests/*" ".git/*"" }
  • 然后运行 composer run archive(Composer 2.5+)或 composer archive(旧版需用 composer run-script archive

用 git archive 更可靠,尤其适合发布版本

如果你项目用 Git 管理,git archive 是最干净的打包方式——它只打当前 commit 的源码,不含 vendor/node_modules/、.git 目录等干扰项:

  • git archive --format=zip --output=myapp-v1.2.0.zip HEAD:打包最新提交
  • git archive --format=tar.gz --output=release.tar.gz v1.2.0:按 tag 打包,适合发版
  • 注意:vendor/ 不在 Git 中,所以打包后必须单独 composer install --no-dev,这点不能漏

别忽略 autoload 优化和 .gitattributes

手动 zip 或 git archive 后,如果没做 autoload 优化,部署到目标环境可能加载慢甚至失败:

  • 务必在打包前运行 composer dump-autoload --optimize --no-dev,生成扁平化映射表
  • 在项目根目录加 .gitattributes 文件,标记哪些文件不该进归档:
    vendor/** export-ignore tests/** export-ignore .php-cs-fixer.php export-ignore
  • 这样 git archive 就会自动跳过这些路径,比靠命令行 -x 参数更可控

最容易被忽略的是:打包后没验证 vendor/autoload.php 是否能正常 require,以及是否误打了本地配置文件(如 .env)。上线前至少跑一次 php -r "require 'vendor/autoload.php'; echo 'OK';"

text=ZqhQzanResources