composer create-project是唯一正解,因为它原子性地克隆项目模板、安装依赖并执行post-create-project-cmd钩子(如生成.env和APP_KEY);而init只写空JSON,require把框架装进vendor/,install在无lock文件时直接报错。

必须用 composer create-project,其他方式不是慢就是错——composer init 只写空 JSON,composer require 把框架塞进 vendor/,composer install 会直接报错“No composer.lock file present”。
为什么 composer create-project 是唯一正解
它不是“装一个包”,而是克隆整个项目模板仓库(比如 laravel/laravel 的 11.x tag),在目标目录里执行 composer install + post-create-project-cmd 钩子(生成 .env、APP_KEY、重命名配置文件等)。这些动作是原子性的,缺一不可。
-
composer init输出的composer.json里连autoload都没配,更别说public/或artisan -
composer require laravel/laravel结果是vendor/laravel/laravel/src/,php artisan serve直接报错:找不到命令 -
composer install在空目录下会卡死,因为它只认composer.lock,而新项目根本没有这个文件
composer create-project 必须传的三个参数怎么填
最简可用形式是 composer create-project vendor/name target-dir,但漏掉任一关键点都会失败:
-
target-dir必须是**不存在的空目录**,不能是.(除非当前目录真为空),否则报Project directory is not empty - 包名要精确匹配 Packagist 注册名:
topthink/think(ThinkPHP6)、roots/bedrock(WordPress 工程化脚手架),不是thinkphp或wordpress/core - 版本号必须用双引号包裹,含
*或^时尤其重要:"11.*"、"^10.0";只写11会被 shell 展开或解析失败
执行完没 vendor/autoload.php 怎么办
这不是命令失败,而是 composer install 步骤被跳过或中断了。常见于 CI 构建、Docker 启动或网络超时后自动退出。
- 先进入项目目录:
cd myapp - 手动补装依赖:
composer install --no-interaction - 如果仍报 zlib 错误,删缓存:
rm -rf ~/.composer/cache/再试 - Windows 下路径含中文或空格会导致静默解压失败,换成全英文路径(如
C:/dev/myapp)
私有模板或自定义 skeleton 能不能用
能,但有两个硬性前提:
- 包必须可被 Composer 访问:已在
composer.json中配置repositories,且 type 是vcs或composer - 其
composer.json中必须声明"type": "project",否则create-project会当普通库处理,报Could not find package xxx - 钩子脚本
post-create-project-cmd必须定义在模板包自己的composer.json根级scripts里,名称全小写,不能拼错
真正麻烦的是那些依赖钩子做密钥生成或环境检测的模板——绕过 create-project 直接 git clone + install,这些步骤就彻底丢了。


















