发布于2026-07-17 阅读(0)
扫一扫,手机访问
Composer create-project 仅识别 type: "project" 的包作为模板,否则会误装入 vendor/;必须在模板包的 composer.json 中正确定义 type 和 post-create-project-cmd 脚本,且通过合法 VCS 仓库发布。

composer create-project 本身并不支持“模板文件”这个概念,它只认包(package)。你得把模板做成一个可安装的 type: "project" 包,否则所有所谓的“自定义模板”操作都会失败,或者干脆被误装进 vendor 目录。
vendor/ 而不是生成新项目?问题其实出在包的 "type" 字段上。Composer 只有在识别到 "type": "project" 时,才会触发 create-project 的骨架复制逻辑;否则一律按普通库处理,直接 require 进 vendor/。这就像你让快递员送一个“项目模板”,结果他一看标签没写清楚,直接当成普通包裹塞进了仓库。
"type": "library"(默认值)或未声明 type → 模板包被当成依赖装进 vendor/your-vendor/template,毫无意义。"type": "project" → Composer 会克隆整个仓库到目标目录,清空 .git,执行脚本,这才是你想要的效果。composer.json 就能当模板”——没有 type,就等于没有身份证。post-create-project-cmd 脚本不执行?检查这三个地方这个钩子只在新项目(即目标目录)的 composer.json 里定义才生效,而不是在模板源码的 composer.json 里写。不少开发者在这里栽了跟头。
composer.json 中,且字段名是 "post-create-project-cmd"(注意拼写和大小写)。../template/src 这类相对路径读文件。php artisan key:generate),需确保该工具已在新项目中可用(即已通过 require 声明或自带)。--repository用 --repository 手动指定 URL 容易出错,尤其当模板未发布到 Packagist 时,更推荐显式声明 VCS 类型 + 使用完整包名。这就像你给导航软件一个模糊地址,它大概率会把你带偏。
composer create-project your-vendor/my-template my-app --repository='{"type":"vcs","url":"https://gitlab.internal/my-template"}'composer create-project --repository=https://gitlab.internal/my-template.git ...(URL 不是合法 repository 配置)模板里写 "App\": "src/" 没问题,但像 APP_NAME=MyProject 这种变量,不能指望开发者去改 .env。好的工具应该自动完成这些繁琐工作。
post-create-project-cmd 自动 copy + 替换:@php -r "file_put_contents('.env', str_replace('MY_APP', 'my-app', file_get_contents('.env.example')));""require": { "your-vendor/my-template": "*" } —— 这会造成循环依赖,create-project 直接报错。v1.0.0 比 dev-main 更稳定;私有库记得同步 tag 到服务器,否则 create-project your-vendor/my-template my-app v1.0.0 会找不到版本。真正卡住人的从来不是命令怎么敲,而是搞不清 create-project 实际上是在“安装一个包”,而不是“复制一堆文件”。模板仓库的 composer.json 必须能独立安装、运行、被索引——它就是一个普通包,只是用途特殊而已。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8