必须用composer create-project,因为composer init只生成空composer.json,不建目录、不装依赖、不执行初始化脚本,无法得到含入口文件和autoload.php的可运行骨架;标准命令为composer create-project vendor/name target-dir [version],target-dir须为空目录,vendor/name须精确匹配packagist注册名,version建议加引号避免解析错误。

必须用 composer create-project,其他方式不是慢就是错。
为什么 composer init 不能生成可用骨架
它只输出一个空的 composer.json,不带 autoload、不建 src/、没有入口文件、更不会执行初始化脚本。你手动 require 框架后,vendor/ 里只有类库,没项目结构——比如 laravel/laravel 的 artisan、symfony/skeleton 的 public/index.php 全都不存在。
-
composer init后运行composer install会直接报错:No composer.lock file present -
composer require laravel/laravel实际装的是vendor/laravel/laravel/src/,不是完整项目,php artisan serve找不到命令 - 想补全结构?得自己建目录、配 autoload、复制 .env、写启动脚本——和手写没区别
composer create-project 必须传的三个参数怎么填
命令格式是 composer create-project vendor/name target-dir [version],漏掉任一关键点就失败:
-
target-dir必须是**不存在的空目录**,不能是.(除非当前目录真为空),否则报错:Project directory is not empty -
vendor/name要精确匹配 Packagist 注册名:如laravel/laravel、symfony/skeleton、topthink/think,不是laravel或thinkphp -
version建议用双引号包裹,尤其含^或*时:"11.*"、"^7.0";只写11可能被 shell 展开或解析失败
执行完没 vendor/autoload.php 怎么办
这不是命令失败,而是 composer install 步骤被跳过或中断了。常见于 CI 构建、Docker 启动或网络超时后自动退出。
- 先检查
target-dir下是否有composer.lock和vendor/目录;没有就说明安装中途断了 - 进目录重跑:
composer install --no-interaction(避免交互式提示卡住) - 国内环境记得提前换源:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - PHP 版本不匹配时加
--ignore-platform-reqs,但别在生产环境用
私有 skeleton 怎么拉取
如果你维护内部模板(比如 acme/internal-skeleton),不能直接 create-project,得先声明仓库:
- 在目标目录外执行:
composer config -g repositories.acme composer https://repo.acme.com - 再运行:
composer create-project acme/internal-skeleton:dev-main myapp - 注意:
dev-main是分支名,不是main;如果用 tag,写成1.2.0或"1.2.*" - 私有包若需认证,得提前配置
auth.json,否则会卡在 auth prompt
真正容易被忽略的是:骨架的“一键”效果,依赖模板仓库里预置的 post-create-project-cmd 脚本——比如生成 .env、重命名配置、执行 php think build 这类动作。一旦模板没配这个钩子,哪怕 create-project 成功,你也得手动补步骤。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











