Composer archive命令不存在,执行必报错“Command 'archive' is not defined”;正确做法是先运行composer install --no-dev --optimize-autoloader,再用git archive或zip打包,并确保包含composer.lock、排除敏感文件且验证autoload.php可加载。

composer archive 命令不存在,执行必报错:Command "archive" is not defined. 不是你装错了,也不是版本低——它在 Composer 2.0 中已被彻底移除,所有稳定版(包括当前 2026 年的 2.5+)均不提供该命令。
为什么 composer archive 一定失败
这个命令从未作为用户可用功能开放过。它的 ArchiveCommand 类是内部隐藏类,仅被 Packagist 或实验性 composer pack(2.5+)间接调用,不会出现在 composer list 输出中,官方文档也早已删除全部说明。
- 你搜到的成功案例,大概率是项目里装了第三方 bin 工具(如
vendor/bin/composer-archive),不是 Composer 自带 - 即使强行回退到 Composer 1.x 后期,它也只打包源码,不含
vendor/,解压后无法运行 - 所谓
--format=zip --dir=./dist等参数,实际来自过时插件或混淆了git archive的用法
生产环境归档必须先跑 composer install --no-dev --optimize-autoloader
这是不可跳过的前提。没这一步,vendor/autoload.php 缺少优化映射表,部署后要么 require 失败,要么加载极慢;dev 依赖还会混入,体积翻倍、安全风险上升。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
--no-dev:排除phpunit、php-cs-fixer等开发包 -
--optimize-autoloader:生成vendor/composer/autoload_classmap.php,避免运行时扫描路径 -
--prefer-dist:优先下载压缩包而非 Git 克隆,更快更稳定 - 别漏掉
composer.lock:它必须随包一起发布,否则目标环境composer install无法复现依赖
用 git archive 打源码包比手动 zip 更干净
如果你项目用 Git 管理,git archive 是最接近“真实发布快照”的方式——它只打包当前 commit 的 tracked 文件,天然不含 .git/、node_modules/、未提交的 .env。
- 先配
.gitattributes控制内容:/tests export-ignore、/.env export-ignore、vendor/** export-ignore - 打最新 tag:
git archive --format=zip --output=myapp-$(git describe --tags --abbrev=0).zip HEAD - 注意:
vendor/不在 Git 中,所以归档后必须在目标机再跑一次composer install --no-dev - Windows 用户请用 Git Bash 或 WSL;CMD 自带
zip不支持-x排除,不可靠
自动化打包建议写进 composer.json 的 scripts
把逻辑收束到 composer.json,比依赖未知第三方工具更透明、更易调试。例如:
"scripts": {
"package": [
"@composer install --no-dev --optimize-autoloader",
"zip -r myapp-$(date -I).zip . -x \"vendor/composer/autoload_classmap.php\" -x \".git/*\" -x \"tests/*\""
]
}
然后运行:composer run package(Composer 2.5+)或 composer run-script package(旧版)。
- 不要在脚本里
rm -rf vendor或删.git,会破坏本地开发环境 - 别用
zip -r deploy.zip .直接打包整个目录——容易误打进.env、phpunit.xml或绝对路径缓存文件 - 最容易被忽略的是:打包后没验证
vendor/autoload.php是否能正常require,上线前至少跑一次php -r "require 'vendor/autoload.php'; echo 'OK';"

















