如何通过Composer创建项目模板(project template)?

16次阅读

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

如何通过Composer创建项目模板(project template)?

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 平台(githubgitlab、私有 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-mainv1.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,尤其涉及目录结构或配置键名变更

text=ZqhQzanResources