答案:create-project忽略config.vendor-dir,因其执行install时使用临时内存中的composer.json副本,不读取磁盘配置;必须先创建项目,再手动修改composer.json并重装依赖。

不能在 composer create-project 过程中直接指定 vendor 路径 —— 它根本不读取目标项目的 composer.json 配置,也不会应用 config.vendor-dir。
为什么 create-project 忽略 config.vendor-dir
该命令本质是:先下载项目 zip/tar 包 → 解压到本地 → 执行一次 composer install。但关键点在于:它执行 install 时用的是「临时生成的、未写入磁盘的 composer.json 内存副本」,不加载你后续手动改写的配置。
- 即使你在模板项目里提前写了
"vendor-dir": "third-party",create-project仍会把包装进vendor/ -
-d /path参数只影响查找composer.json的位置,不改变写入路径(详见官方文档) - 环境变量如
COMPOSER_VENDOR_DIR在 Composer 2.x 中已失效,不会被识别
真正可行的两步法
想让新项目从一开始就用自定义 vendor 路径,必须分两步走,且顺序不能错:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先运行
composer create-project vendor/name myapp,完成基础拉取 - 进入项目目录:
cd myapp - 编辑
composer.json,在config字段下添加:"config": { "vendor-dir": "third-party" } - 删掉现有
vendor/目录:rm -rf vendor - 再执行
composer install—— 此时才会按新配置生成third-party/并重建 autoload
容易踩的坑:autoload 和 bin 文件全失效
改了 vendor-dir 后,以下地方必须同步更新,否则立刻报错:
- PHP 代码中所有
require 'vendor/autoload.php'→ 改成require 'third-party/autoload.php' - CI 脚本或部署命令里调用的
vendor/bin/phpunit→ 改为third-party/bin/phpunit - IDE(如 PHPStorm)需手动在
Settings → PHP → Include Paths中添加third-party,否则无法跳转和补全 - 如果项目用了
bin-dir,必须在config中显式配对:"config": { "vendor-dir": "third-party", "bin-dir": "third-party/bin" }
最常被忽略的一点:改完 vendor-dir 后,composer dump-autoload 是无效的——它不重建 autoload.php 入口文件,必须删 vendor + 重装。

















