composer archive 不能打包整个项目,因为它仅按 composer.json 的 archive 配置打包指定源码(如 src/),不包含 vendor/、composer.lock、public/、config/ 等运行必需文件,也不支持自定义归档名或自动排除非运行时路径。

composer archive 不是导出当前项目的正确命令,它只打包指定的包(如 monolog/monolog),且默认不包含 vendor/、composer.lock 或项目源码 —— 想用它一键打包整个项目并部署,会直接失败。
为什么 composer archive 不能用来打包你的项目
这个命令本质是为 Packagist 上的包作者服务的:它从 composer.json 的 archive 配置读取规则,生成供他人 require 的归档(比如发布一个新版本时打包源码)。它不会:
- 自动包含你项目根目录下的 PHP 文件、配置、前端资源
- 识别或复制
vendor/目录(即使你刚composer install过) - 保证
composer.lock被包含(而生产环境部署必须依赖它) - 支持排除
.git/、tests/等常见非运行时路径(除非你手动写archive.exclude)
真正能打包完整可部署项目的替代方案
用标准系统命令更可控、更透明。推荐在项目根目录执行:
zip -r myapp-release.zip . -x ".git/*" -x "vendor/*" -x "tests/*" -x "phpunit.xml" -x "composer.phar" -x "README.md"
然后单独安装依赖:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在目标服务器上
unzip myapp-release.zip - 运行
composer install --no-dev --optimize-autoloader
如果非要“一步到位”,可写个简单脚本:
#!/bin/bash<br>rm -f project-release.zip<br>composer install --no-dev --optimize-autoloader<br>zip -r project-release.zip . -x ".git/*" -x "node_modules/*" -x "tests/*"
如果你坚持用 composer archive,必须改配置
它只响应 composer.json 里的 archive 字段,例如:
"archive": {
"exclude": [".git", "tests", "phpunit.xml", "composer.phar"]
}
但注意:
- 它仍不会打包
vendor/,因为 Composer 认为 vendor 是“安装产物”,不是“源码” - 它默认只打包当前包定义的源码(即
"autoload": {"psr-4": {"App\": "src/"}}对应的src/),不会包含public/或config/ - 执行后生成的 zip 名字由包名+版本决定(如
myvendor-myproject-1.0.0.zip),不可自定义
真正要交付一个可运行的项目包,别绕弯子 —— zip 或 tar 手动控制路径,比依赖 composer archive 的隐式行为可靠得多。最容易被忽略的是:很多人以为打包完 zip 就能直接运行,结果发现缺 composer.lock、缺 .env.example、或者 public/index.php 路径没被包含进去。

















