Composer archive 不能用于项目发布,因其仅打包库源码且不含 vendor/、未优化自动加载、版本与 Git tag 不同步;应改用 git archive 或 zip 配合 composer install --no-dev --optimize-autoloader。

Composer 本身不提供“项目归档”能力,composer archive 命令只打包「包(package)」本身(即源码+元数据),不是你项目的可部署产物。真要生成生产可用的归档包,必须绕过这个命令,走 composer install --no-dev --optimize-autoloader + git archive 或系统 zip 的组合路径。
为什么 composer archive 不能用于项目发布
它设计目标是为 Packagist 上的 library 打分发包,行为受限于 composer.json 中的 archive.exclude 和 type 字段,且默认不包含 vendor/ —— 这意味着你解压后无法直接运行;它还会按 name 和 version 自动生成文件名(如 myorg/myapp-1.2.0.zip),但这个 version 往往和 Git tag 不同步,CI 中极易出错。
- 执行
composer archive时若composer.json缺少name,会报错:Package name is required - 即使成功,产出包里没有
vendor/autoload.php,require 'vendor/autoload.php'必然失败 - 它不会触发 autoloader 优化,也不会清理
dev依赖,vendor/实际未生成
git archive 是最干净的源码归档方式
前提是项目用 Git 管理,且已配置 .gitattributes 控制导出内容。它只打包当前 commit 的 tracked 文件,天然排除 .git/、node_modules/、未提交的 .env 等风险项。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先在项目根目录写
.gitattributes:
vendor/** export-ignore tests/** export-ignore .php-cs-fixer.php export-ignore .env export-ignore .gitignore export-ignore
- 打最新 commit:
git archive --format=zip --output=myapp-$(git describe --tags --abbrev=0).zip HEAD - 打指定 tag:
git archive --format=tar.gz --output=release.tar.gz v1.2.3 - 注意:
vendor/不在 Git 中,所以归档后必须在目标环境跑composer install --no-dev --optimize-autoloader
打包前必须做 autoload 优化,且不能补救
composer dump-autoload --optimize --no-dev 只生成 vendor/composer/autoload_classmap.php,但不会重建 vendor/composer/autoload_*.php —— 这些文件只有 composer install 时才生成。所以优化动作必须嵌入安装流程,不能分开。
- 正确顺序:删掉本地
vendor/→composer install --no-dev --optimize-autoloader --prefer-dist→ 归档 - 错误做法:先
composer install,再dump-autoload --optimize,此时autoload_files.php等仍为未优化状态 - 验证点:归档前检查
vendor/autoload.php是否存在,且其中是否含classmap加载逻辑
别漏掉 composer.lock 和环境配置校验
composer.lock 必须随归档一起发布,否则目标环境 install 时版本漂移;但 .env 之类本地配置绝不能进包 —— 它们该由部署流程注入,而非打包携带。
-
git archive依赖.gitattributes排除.env,手动zip要显式加-x ".env" -
composer.lock在.gitattributes中不要设export-ignore,它是部署一致性基石 - 最容易被忽略的是:归档后没在空目录下解压并执行
composer install --no-dev验证能否成功加载vendor/autoload.php

















