Composer 没有“原子导出为模板”功能,因其不支持将包或配置片段单独导出为模板;所有模板行为均由 create-project 驱动,且必须是完整、可安装的 type: "project" 包。

Composer 没有“原子导出为模板”这个操作——它不支持把某个包、某个配置片段或某段脚本单独“导出成模板”。所谓“模板”,只存在于 create-project 流程中,且必须是完整、可安装的 type: "project" 包。
为什么 composer export template 命令不存在
Composer 的命令集里根本没有 export 或 template 子命令。所有“模板”行为都由 create-project 驱动,而它只做一件事:克隆 + 安装 + 执行钩子。你无法从已有项目中“抽离出一个模板”,就像不能从运行中的 PHP 进程里“导出一个函数定义模板”一样。
-
composer create-project是单向初始化动作,不是双向同步工具 - 试图用
dump-autoload、archive或config伪造模板,结果只会得到不可安装的 zip 或错乱的依赖树 - 社区里流传的“导出模板脚本”基本是手动打包 + 改
composer.json+ 补post-create-project-cmd,本质仍是人工构造 project 包
create-project 要求的最小 project 包结构
能被 create-project 正确识别并展开的,必须是一个 Git 仓库,且满足:
- 根目录下有
composer.json,其中"type": "project"必须显式声明(不能省略或写成"library") - 必须有可执行入口,比如
public/index.php、bin/console或至少一个README.md—— 否则create-project可能静默失败或报no autoload configuration -
composer.json中不要出现"require": { "this-same-package": "*" },否则会触发循环依赖错误 - 若含占位符(如
__VENDOR__),需在scripts中定义post-create-project-cmd并调用自定义 PHP 脚本替换,不能靠用户手改
常见卡点:Could not find package 的真实原因
执行 composer create-project vendor/name 报这个错,90% 不是因为包不存在,而是稳定性策略拦截:
- 默认只搜
stable版本,但你的模板包很可能只有dev-main分支,没打任何 tag -
composer show vendor/name能查到?那是show默认允许dev;create-project默认不允许 - 正确解法只有两个:
composer create-project vendor/name --stability=dev,或给模板仓库打一个v1.0.0tag - 别在模板的
composer.json里写"minimum-stability": "dev"—— 这会让所有下游项目被迫降级稳定性
真正麻烦的地方不在命令怎么敲,而在于:你得把整个项目当成一个“可安装产品”来维护——版本号、分支策略、钩子脚本、入口文件缺一不可。没人能跳过这层约束,靠一条命令“原子导出”。











