composer create-project才是真正“新建一个可运行项目”的命令;它从指定包拉取完整骨架、建目录、装依赖并执行初始化脚本,而init仅生成空composer.json,不创建文件或安装任何内容。

直接用 composer create-project,别碰 composer init——后者只生成空 composer.json,而你要的是能立刻跑起来的项目骨架。
为什么 create-project 比 init 更适合新建项目
你不是在写一个库,而是在启动一个应用。Laravel、Symfony、Bedrock、ThinkPHP6 的官方初始化方式全是 create-project,因为它做的事是:克隆完整模板 → 安装依赖 → 执行 post-create-project-cmd 脚本(比如生成密钥、复制 .env.example)→ 得到一个 vendor/autoload.php 存在、php -S 能直接跑的目录。
composer init 只输出 10 行 JSON,之后还得手动加 autoload、设 require、init git、配 web server root——90% 的人卡在第二步。
- 真实项目几乎都基于某个框架或内部模板,不是从零定义 autoloading 规则
-
create-project的目标包(如laravel/laravel)本身就是一个含public/index.php、artisan、composer.json的可运行项目,不是“库” - 如果你执行完
init还得require框架,那结构大概率错:框架文件会进vendor/,而不是项目根目录
create-project 找不到包?先看这三个地方
错误信息 Could not find package vendor/name 不代表包名错了,大概率是稳定性或源配置问题。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 默认只搜
stable版本,但你的模板可能只有dev-main分支:加--stability=dev就行,例如composer create-project myorg/my-skeleton myapp --stability=dev - 私有 Git 仓库没声明:必须在
composer.json里加repositories,且type必须是vcs,URL 指向 HTTPS 或 SSH 地址 - Packagist 缓存未更新:运行
composer clear-cache,或临时切回官方源composer config -g repo.packagist composer https://packagist.org
post-create-project-cmd 脚本不执行?检查定义位置和大小写
这个钩子**只在新生成项目的 composer.json 顶层生效**,不是在模板包自己的 composer.json 里定义,更不是在某个 require 的依赖中。
- 正确位置:
templates/my-skeleton/composer.json的根级"scripts": { "post-create-project-cmd": "php ./init.php" } - 名称必须是
post-create-project-cmd,全小写,不能写成PostCreateProjectCmd或漏掉- - 脚本执行时工作目录是新建项目根目录(如
myapp/),不是模板源码目录,所以别用../template/src这类相对路径 - 如果脚本里用了
readline()或交互式输入,在 CI 或--no-interaction下会卡住,改用命令行参数或环境变量传值
vendor 目录为空?八成是 require 或 stability 配置错了
执行完 create-project 却没有 vendor/autoload.php,常见于以下情况:
- 模板包的
composer.json里"require"是空的,或只写了占位符(如"php": "^8.2"但没框架依赖) -
"minimum-stability": "stable"写死了,但实际依赖(如myorg/internal-lib)只有dev-main版本,Composer 直接跳过安装 - 用了
--no-install参数(CI 脚本里容易误加),此时需手动进目录运行composer install --no-interaction - 私有依赖没在模板包的
composer.json里同步声明repositories,只靠用户本地全局配置无效
最稳的排查方式:进新项目目录,跑 composer install -v,盯住 Resolving dependencies 后有没有 Installing xyz/abc —— 没有就说明依赖解析失败,不是网络或权限问题。

















