composer create-project是唯一能直接运行的项目初始化命令,它从type为"project"的模板包(如laravel/laravel)拉取完整骨架、执行post-create-project-cmd钩子并安装依赖;而composer init仅生成空配置,require命令会错误地将框架装入vendor/导致无法运行。

直接用 composer create-project,别碰 composer init —— 后者只生成空配置,你得手动补 autoload、建目录、写入口、配 Git,90% 的人卡在第二步。
为什么 create-project 是唯一能跑起来的命令
composer create-project 从 "type": "project" 的模板包拉取完整骨架:包括 public/index.php、artisan 或 bin/ 脚本、预设的 composer.json 和自动执行的 post-create-project-cmd 钩子(比如生成密钥、复制 .env.example)。
composer init 只输出一个 10 行左右的 JSON,不创建任何 PHP 文件,也不安装依赖;composer require laravel/laravel 会把框架塞进 vendor/,导致 php artisan serve 直接报错 —— 因为命令文件根本不在项目根目录。
- 真实项目几乎都基于框架或内部模板启动,不是从零定义命名空间和加载规则
- 目标包(如
laravel/laravel、topthink/think)本身就是一个可直接运行的项目,不是“库” - 执行完
create-project,你立刻能得到一个含vendor/autoload.php的目录,php -S就能跑通
执行 create-project 前必须确认的三件事
否则大概率卡住或报 Could not find package:
- 终端能识别
composer --version(不是command not found) - 已配置国内镜像源:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意末尾斜杠和composertype 值) - 目标目录为空且不存在 ——
create-project拒绝往非空目录写入,也不能用.当前目录(除非你刚mkdir并cd进去)
验证镜像是否生效:composer config -g repo.packagist 应输出完整 JSON,含 "url": "https://mirrors.aliyun.com/composer/"。
常见失败场景与对应解法
报 No composer.lock file present?那是你误用了 composer install —— 新项目没 composer.lock,这个命令根本不该出现在初始化阶段。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
卡在 Resolving dependencies?不是网络问题,是 composer.json 里版本约束太宽(比如 "^8.0 || ^9.0")或 require-dev 工具链太多,Composer 在穷举兼容组合。
- 镜像源切换后仍失败:删掉
vendor/和composer.lock,再跑create-project - 找不到包(如
myorg/my-skeleton):加--stability=dev(默认只拉 stable),或检查模板包的composer.json是否声明了"type": "project" - 脚本没执行(如密钥没生成):确认
post-create-project-cmd定义在模板包自己的composer.json根级scripts字段,且全小写、无拼写错误
vendor/autoload.php 必须在入口第一行引入
不是“建议”,是硬性前提。它之前若已有 session_start()、echo 或未声明类的实例化,PHP 会直接报 Class 'xxx' not found 或 Cannot send session cache limiter,后续 require 补救无效。
正确写法只有一行:require __DIR__ . '/vendor/autoload.php';,且必须放在所有业务逻辑之前。
路径别写成 ./vendor/autoload.php —— CLI 下当前路径和 Web Server 的 DocumentRoot 不一致,本地能跑线上必挂。
旧系统已有自己的 require 链?别删,把它挪进 composer.json 的 "autoload": {"files": [...]},再统一走 Composer 加载。










