Composer 本身不生成也不支持打包成 EXE 文件,它仅管理 PHP 依赖并生成 vendor/ 目录和 autoload.php;EXE 打包需借助 PHP Desktop、winexe 等第三方工具,与 Composer 无关。

Composer 本身不生成、也不支持打包成 EXE 文件,所谓“发布动态 EXE”是误解或混淆了工具边界。它只管理 PHP 依赖,输出的是 vendor/ 目录和自动加载逻辑,不是可执行二进制。
为什么 composer require 后不会生成 EXE
Composer 是纯 PHP 的依赖声明与安装工具,所有操作都在 CLI 环境下完成,最终产物是 PHP 源码文件 + autoload.php。它没有编译、打包、加壳、生成 Windows 可执行文件的能力——这些属于 PHP Desktop、ExeOutput、roadrunner(配合 Swoole)或第三方打包器(如 phpdesktop 或 winexe)的职责。
常见误判场景:
- 看到别人项目里有
app.exe,误以为是 Composer 产出,实际是后期用其他工具封装的 - 把
composer.phar当作“EXE”——它只是带 shebang 的 PHP 归档,仍需本地 PHP 解释器运行 - 在 Windows 上双击
composer.bat无反应,就以为“能做成桌面程序”,但该批处理本质仍是调用php.exe
想让 PHP 项目变成双击运行的 EXE,该走哪条路
若你的真实目标是分发一个无需用户装 PHP 就能运行的桌面端 PHP 应用(比如配置生成器、本地调试工具),可行路径只有两条,且都绕不开 Composer:
- 用
PHP Desktop:它内嵌 PHP 运行时 + Chromium 渲染器,你把 Composer 安装好的vendor/和入口脚本放进去,打包为 EXE;注意它只支持 Windows/macOS,不支持 Linux 桌面分发 - 用
winexe(或类似工具如Box Project):将 PHP 脚本 +vendor/+ 一个精简版php.exe(含必要 DLL)打包进单个 EXE;但必须确保目标机器未禁用 ASLR / DEP,且部分杀毒软件会误报 - 别指望
composer.json里写个 script 自动触发 EXE 打包——没有官方或主流插件支持该行为
“虚拟拆解手册”实际指什么
这个词在 Composer 生态中并无标准定义,但结合上下文,大概率是指对已安装依赖进行结构化解读,即“看清 vendor 里到底装了啥、怎么联动”。这需要手动操作,而非自动生成手册:
- 运行
composer show --tree查看当前项目依赖的完整层级关系(谁依赖了谁) - 用
composer depends vendor/package反查某个包被哪些包引用 - 检查
vendor/composer/installed.json:这是 Composer 运行时的真实安装快照,含每个包的源路径、版本、自动加载映射 - 注意:不要直接修改
installed.json,它是只读缓存;改了也不会生效,下次composer install会被覆盖
真正容易被忽略的点是:哪怕你用各种工具打出了 EXE,只要里面跑的是 PHP 代码,就依然受 PHP 版本兼容性、扩展启用状态、opcache 配置影响——这些在打包时无法“固化”,只能靠测试环境对齐。所以与其追求 EXE 表象,不如先确保 composer.lock 锁死、config.platform.php 设对、autoload 规则清晰。











