composer怎么创建项目模板_composer使用create-project教程

3次阅读

create-project 命令本质是克隆已配置好的项目骨架:从 packagist 下载指定 vendor/name 的最新稳定版,解压并执行 composer install,清理临时文件;要求目标包声明 “type”: “project”,且需预先配置私有源或使用 -n、–remove-vcs 等参数实现自动化

composer怎么创建项目模板_composer使用create-project教程

create-project 命令到底在做什么

它不是“新建空项目”,而是从指定包(通常是 vendor/name)下载最新稳定版,解压后执行 composer install,再删掉 vendor/composer/installed.json 等临时文件——本质是“克隆一个已配置好的项目骨架”。

  • 如果你直接 composer init 再手动写 composer.json,那不属于模板场景
  • 真正用 create-project 的前提:目标包必须含 composer.json 且声明了 "type": "project"(否则会警告但仍能跑)
  • 它不读取本地 composer.json,所有依赖都来自远程包的 composer.json

为什么 vendor/name 不写全就报错

因为 create-project 默认只查 Packagist 官方源,且要求格式严格:vendor/name 必须存在、非私有、有稳定版本(如 v1.0.01.0),否则报 Could not find package vendor/name

  • 常见错误:把 gitHub 仓库地址当包名,比如输 https://github.com/foo/bar → 应该用 foo/bar(前提是已提交到 Packagist)
  • 私有包必须先在 composer.json 里配好 repositories,再加 --repository-url 参数
  • 想强制用 dev 分支?得加 --stability=dev --prefer-source,否则即使包有 dev-main 也不会选

如何跳过交互式安装、全自动跑完

create-project 默认会问你是否删除已存在的目录、是否安装推荐插件等,CI/脚本里必须关掉这些交互。

  • -n(no-interaction)跳过所有提问
  • --remove-vcs 自动删掉 .git 目录,避免后续 git 操作混乱
  • 如果目标模板含 scripts(如 post-create-project-cmd),它仍会执行;不想运行?加 --no-scripts
  • 示例命令:composer create-project laravel/laravel myapp -n --remove-vcs

模板里的 autoload 和路径映射怎么生效

模板自身的 autoload 配置(如 "psr-4": {"App": "app/"})会在 create-project 后立刻写入新项目的 vendor/autoload.php,但仅对模板自带代码有效。

  • 你后续在新项目里新增的类,必须自己改 composer.json 的 autoload 段并运行 composer dump-autoload
  • 如果模板用了 classmap 映射了 database/,而你删了这个目录,autoload_classmap.php 里还留着旧路径——不会报错,但类加载会失败
  • 别依赖模板自动帮你处理 config/resources/ 下的文件;它们只是复制过去,内容不会因环境变量或交互输入动态替换

最常被忽略的是:create-project 不做任何代码生成或变量替换。所谓“模板”只是静态文件快照,没有类似 Cookiecutter 或 Yeoman 的占位符渲染能力。要动态注入值,得靠模板自身定义的 scripts 或额外工具配合。

text=ZqhQzanResources