composer create-project是唯一能完整复制项目骨架并执行初始化脚本的命令,它自动下载含composer.json的稳定版模板、创建空目标目录、运行post-create-project-cmd(如生成.env和APP_KEY),而composer install仅还原已有lock文件的依赖,无法初始化新项目。

直接用 composer create-project,别碰 composer init 或 composer install —— 它们不是干这个的。
为什么不能用 composer install 初始化新项目
你本地没有 composer.lock 文件时,composer install 会直接报错:No composer.lock file present. You must run 'composer install' to generate one. 这是个死循环提示,信了就卡住。它只负责“还原已有锁文件的依赖”,不拉骨架、不建目录、不跑初始化脚本。
而 create-project 是唯一能从远程包(比如 laravel/laravel)完整复制项目结构 + 自动运行 post-create-project-cmd(如生成 .env、APP_KEY)的命令。
- 目标包必须是
"type": "project",否则会被当成普通库装进vendor/,而不是展开成项目根目录 - 默认只拉
stable版本(如v11.2.0),不是main分支;要 dev 版得加--stability=dev - 如果执行后
vendor/为空,大概率是网络中断、权限不足或镜像源失效,不是命令写错了
composer create-project 必须传的三个参数怎么填
最简形式是 composer create-project vendor/name target-dir,但漏掉任一关键点都会失败:
-
target-dir必须是**不存在的空目录**,否则报Project directory is not empty;不能是.(当前目录),除非你确认它是空的 - 包名要精确匹配 Packagist 上注册的名称,比如 ThinkPHP6 是
topthink/think,不是thinkphp/think - 版本号要用引号包裹,尤其是含
^或*时,例如"6.0.*"或"^10.0";只写10会被 shell 展开或解析失败
国内用户常因镜像不同步导致 Could not find package,临时切回官方源:composer config -g repo.packagist composer https://packagist.org
常见失败现象和立刻能试的解法
执行完命令,发现项目目录里缺 vendor/autoload.php、.env 或根本没生成 public/,先别重跑,看这几条:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 提示
zlib_decode(): data error→ Composer 缓存损坏,删掉~/.composer/cache/再试 - Windows 下路径含中文或空格 → 换成全英文路径,例如
C:/dev/myapp,否则解压阶段可能静默失败 - Linux/macOS 报
file_put_contents(./composer.json): failed to open stream→ 当前用户对目标目录无写权限,别用sudo,改用chown或换用户目录 - PHP 版本不匹配(如 Laravel 11 要求
^8.2,你本地是 8.1)→php -v确认,别用--ignore-platform-req=php硬过,运行时会Fatal error
私有模板或自定义脚手架怎么配
如果你的模板在 GitLab 或公司内网,Packagist 上查不到,就得手动加 repositories:
在全局或项目级 composer.json 里写:
{
"repositories": [
{
"type": "vcs",
"url": "https://gitlab.example.com/myorg/my-template"
}
]
}
之后才能跑:composer create-project myorg/my-template myapp --remove-vcs
--remove-vcs 很关键:它会删掉模板自带的 .git/,否则你第一次 git push 就把别人的历史一起推上去了。而 --no-dev 和 --prefer-dist 是可选优化项,不是必需。
真正容易被忽略的是:所有初始化逻辑(重命名 .env.example、生成密钥、设目录权限)都依赖模板包自己写的 scripts.post-create-project-cmd,Composer 不做任何变量替换或交互提问——你看到的“一键创建”,其实是别人提前写好的脚本在后台跑完的。

















