composer 没有 export 命令,所谓“导出”实为通过 composer install --no-dev --optimize-autoloader --prefer-dist --no-scripts 等参数构建精简生产包,并配合镜像、缓存及手动清理实现部署优化。

Composer 没有 composer export 命令,所谓“导出”通常指生成可部署的生产包(不含源码、dev 依赖、锁文件冗余信息等),本质是 composer install 的精准配置组合,不是独立功能。
为什么找不到 export 命令?
Composer 官方从未提供 export 子命令。社区中提到的“导出”,多是误将以下操作理解为导出:
- 用
composer install --no-dev --optimize-autoloader --prefer-dist构建精简 vendor - 手动打包
vendor/+composer.lock+ 入口文件 - 借助插件如
hirak/prestissimo(已废弃)或composer-archive实现归档
直接运行 composer export 会报错:Command "export" is not defined.
真正要做的:用 install 实现“导出级”精简
生产环境部署时,目标是体积最小、加载最快、无冗余。靠 install 就能达成,关键参数必须同时生效:
-
--no-dev:跳过require-dev中所有包(PHPUnit、phpstan 等),减少 40–60% 文件量 -
--optimize-autoloader(或-o):生成classmap,避免运行时遍历目录 -
--prefer-dist:强制下载压缩包而非 Git 克隆,节省 .git 目录和未跟踪文件 -
--no-scripts:禁用 post-install-cmd 等钩子,防止部署时意外执行开发脚本
推荐命令:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer install --no-dev --optimize-autoloader --prefer-dist --no-scripts
注意:该命令必须在已有 composer.lock 的项目中运行;若 lock 文件缺失,先跑一次 composer update --lock 再执行。
导出后还要清理什么?
即使用了上述参数,vendor/ 里仍可能残留非必要内容:
- 所有
.git目录(尤其vendor/*/.git)——可用find vendor -name '.git' -type d -exec rm -rf {} + -
tests/、docs/、examples/目录(部分包自带)——建议在composer.json的extra中声明清理规则,或用插件roave/composer-dependency-analyser - 未被自动加载器引用的 PHP 文件(如 CLI 工具脚本)——除非你明确要用,否则可删
这些不属于 Composer 自动管理范畴,需额外脚本介入,否则“导出包”仍比实际需要大 2–3 倍。
镜像与缓存不配好,再快的 install 也白搭
国内用户常忽略这点:即使命令全对,如果每次都要从欧洲源拉包,--prefer-dist 的优势会被网络延迟吃掉大半。
- 全局设阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 确保缓存有效:检查
~/.composer/cache/是否可写,cache-files-maxsize不宜设太小(建议 ≥500MiB) - CI/CD 中优先复用缓存:Docker 构建时挂载缓存卷,GitHub Actions 用
actions/cache缓存~/.composer/cache
没配镜像时,“导出式安装”可能耗时 45 秒;配好后稳定压在 10–12 秒——差的是基础设施,不是命令本身。










