composer create-project 必须指定目标目录,该参数即为新建项目文件夹名,如 composer create-project topthink/think myapp 会在当前目录创建含完整骨架的 myapp/;目录必须为空且不可已存在,否则报错“Destination directory is not empty”,因其本质是全新初始化而非覆盖或升级。

必须用 composer create-project 指定目录,composer require 不能替代。 后者只装包,不生成项目骨架,直接导致 Class 'think\App' not found 或 404。
用 create-project 命令时怎么指定目标目录
命令末尾的参数就是你要创建的目录名,它会自动新建并初始化整个项目结构:
-
composer create-project topthink/think myapp→ 在当前目录下新建myapp/目录,并把完整 ThinkPHP 项目(含app/、config/、public/、runtime/等)放进去 - 目录名可以是任意合法路径名,比如
tp8-demo、blog、D:/projects/admin(Windows 下建议用正斜杠或双反斜杠) - 目标目录必须为空,否则 Composer 会报错:「Destination directory is not empty」
- 不要在已有项目里执行这个命令——它不是“升级”或“覆盖”,而是全新初始化
为什么不能用 cd 到空目录再 composer init + require
因为 ThinkPHP 不是一个普通库,而是一套带固定目录结构和初始化逻辑的框架项目。手动 require 只会拉取 topthink/think 核心包,但缺:
-
public/index.php入口文件 → 访问直接 500 或白屏 -
runtime/和config/目录 → 启动时报错或配置无法加载 -
think命令行脚本 →php think执行失败 - 自动执行的 post-create-project-cmd 脚本 → 比如清空
runtime/cache、生成.env示例等
指定 PHP 版本或 ThinkPHP 小版本的写法
版本控制靠 topthink/think 包的 tag,不是靠全局 PHP 版本参数:
立即学习“PHP免费学习笔记(深入)”;
- 装最新稳定版(默认):
composer create-project topthink/think appname - 装 TP8.0.x 分支:
composer create-project topthink/think appname@8.0 - 装 TP6.3.x:
composer create-project topthink/think appname@6.3 - 想强制用 PHP 8.1 运行安装过程?先确保系统默认
php是 8.1,或显式调用:/usr/bin/php8.1 composer create-project topthink/think appname
Windows 下路径空格和中文目录要特别注意
虽然 Composer 支持中文路径,但 ThinkPHP 的 think 命令、伪静态规则、甚至某些扩展(如 think-queue)在处理含空格或中文的路径时容易出问题:
- 避免用
C:\我的项目\tp8,改用C:/work/tp8或D:/php/projects/tp8 - 如果已建在中文路径下,
php think报错「Could not open input file」,大概率是路径被截断或 shell 解析失败 - Apache/Nginx 配置中 DocumentRoot 指向
public/时,路径含空格需加引号,但不如直接避开更省事
真正容易被忽略的是:目录名一旦指定就固化进 appname/config/app.php 的 app_namespace 和自动加载逻辑里,后期重命名目录 ≠ 重命名应用,得同步改配置和命名空间声明。



















