Composer 通过 create-project 命令结合自定义项目包实现模板功能:需准备含 composer.json(含 name、type: "project" 等)的 Git 仓库,推送后用户执行 composer create-project vendor/name my-app 即可初始化新项目,并支持版本指定、脚本自动执行和私有库配置。

Composer 本身不直接提供“项目模板”功能,但可以通过 composer create-project 命令 + 自定义的可安装包(即符合 Composer 规范的、带 composer.json 的仓库)来实现项目模板的效果。核心在于:把一个预配置好的项目结构打包成一个可被 create-project 安装的包。
准备一个可作为模板的项目仓库
这个仓库就是你的“模板”。它应是一个标准的 Composer 包,但目标不是被 require 进其他项目,而是被克隆并初始化为新项目。
- 根目录下必须有有效的
composer.json,其中至少包含"name"(如"myorg/laravel-starter")、"description"和"type": "project"(非必需但语义清晰) - 可预先写好框架基础代码、配置文件(.env.example、config/ 目录等)、常用依赖(如
"require"中声明 Laravel、Doctrine、Monolog 等) - 推荐在
composer.json中设置"autoload": {"psr-4": {"App\\": "app/"}}等自动加载规则,并运行composer dump-autoload确保本地可用 - 将仓库推送到 Git 平台(GitHub、GitLab、私有 Git 服务器),确保公开或你有访问权限
使用 create-project 初始化新项目
用户只需一条命令即可基于你的模板生成新项目,Composer 会克隆仓库、安装依赖、清理 Git 记录(可选),并执行 post-create-project-cmd 脚本(如有)。
- 基本用法:
composer create-project myorg/laravel-starter my-new-app - 指定版本(tag/branch):
composer create-project myorg/laravel-starter my-new-app dev-main或v1.0.0 - 跳过 Git 初始化(避免残留原模板的 .git):
--remove-vcs(默认启用,除非显式加--keep-vcs) - 静默安装依赖:
--no-interaction或-n
增强模板体验:添加安装后脚本
利用 Composer 的 scripts 钩子,在项目创建完成后自动执行初始化操作,提升开箱即用体验。
- 在模板的
composer.json中加入:
"scripts": {
"post-create-project-cmd": [
"@php -r \"copy('.env.example', '.env');\"",
"@php artisan key:generate",
"@php artisan storage:link"
]
}
- 这些命令会在
create-project完成后自动运行(需确保对应 CLI 工具存在,如artisan) - 注意:脚本中路径基于新项目根目录;PHP 内置命令建议用
@php显式调用,避免环境差异
发布与维护模板
让他人能稳定使用你的模板,需注意版本管理和分发方式。
- 打 Git tag(如
v2.1.0)并推送,用户可通过版本号精确安装 - 若托管在 Packagist,提交包 URL 后等待索引;私有包需配置
repositories(在用户项目或全局composer.json中) - 可在 README.md 中明确写出安装命令和初始化说明,降低使用门槛
- 模板更新后,提醒用户升级时注意 breaking change,尤其涉及目录结构或配置键名变更










