答案:创建可复用的Composer项目模板需先构建基础结构并配置type为project的composer.json,随后发布至Packagist或私有仓库,用户即可通过composer create-project命令生成新项目,自动替换占位符、移除版本控制并安装依赖,还可通过post-create-project-cmd脚本执行初始化操作。

创建一个 Composer 项目模板,让你或他人能通过 composer create-project 快速生成新项目,关键是将你的项目设置为可复用的骨架结构,并正确配置 composer.json。以下是具体步骤:
1. 创建模板项目结构
准备一个基础项目作为模板,包含你希望新项目默认拥有的文件和目录。例如:
-
src/– 源代码 -
config/– 配置文件 -
public/index.php– 入口文件 -
composer.json– 核心配置 -
.gitignore、README.md等
你可以使用占位值(如 your-vendor/project-name)在 composer.json 中,后续会被自动替换。
2. 配置 composer.json 为项目模板
确保 composer.json 中包含以下关键字段:
{
"name": "your-vendor/skeleton",
"type": "project",
"description": "A project template for creating new applications.",
"license": "MIT",
"require": {
"php": "^8.1"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"extra": {
"branch-alias": {
"dev-main": "1.0-dev"
}
}
}
注意:
-
"type": "project"是必须的,这样create-project才能识别。 - 不要添加
replace字段来替换自身包名,除非你有特殊需求。
3. 发布到 Packagist 或私有仓库
将模板项目推送到 Git 仓库(GitHub、GitLab 等),然后提交到 Packagist。如果你是企业用户,也可以发布到私有 Composer 仓库(如 Satis、Private Packagist)。
- 确保版本打上 tag(如
v1.0.0) - Packagist 会自动抓取元数据
4. 使用 create-project 创建新项目
一旦模板发布,其他人就可以这样使用:
composer create-project your-vendor/skeleton my-new-project
Composer 会:
- 克隆模板项目
- 创建新的
composer.json,不再包含模板的 name 和 extra 信息 - 移除版本控制信息(.git)
- 安装依赖
5. (可选)支持自定义替换和脚本
你可以通过 Composer 的脚本机制,在项目创建后执行初始化操作,比如:
- 重命名命名空间
- 生成密钥
- 提示用户输入项目名称
在 composer.json 中添加:
"scripts": {
"post-create-project-cmd": [
"echo 'Project created! Don't forget to configure your environment.'"
]
}
更复杂的逻辑可以用 PHP 脚本实现,注册到 post-create-project-cmd 钩子。
基本上就这些。只要你的项目结构清晰、composer.json 正确标注为 type: project,并发布到可访问的仓库,就能被 create-project 使用。










