composer install -d /path 不改变 vendor 安装位置,因为它仅指定 composer.json 和 composer.lock 的读取路径,等价于 cd /path && composer install,vendor 仍按原项目配置(如 config.vendor-dir)写入,未同步修改会导致类加载失败。

Composer 自定义路径只有 config.vendor-dir 这一条路真正可靠,其他方式要么无效,要么埋坑。
为什么 composer install -d 不改变 vendor 安装位置
很多人误以为 composer install -d /path 是用来指定 vendor 目录的,其实它只控制 Composer 去哪读 composer.json 和 composer.lock,vendor 依然写入原项目根目录下的 vendor/(或已配置的 config.vendor-dir)。这在 CI 脚本里尤其危险——本地跑通,流水线却因类加载失败报错。
-
-d参数等价于先cd /path && composer install,不改路径逻辑 - 想换 vendor 位置,必须提前在目标项目的
composer.json中写死"config": {"vendor-dir": "third-party"} - 改完后必须删掉旧
vendor/目录再运行composer install,dump-autoload不够用
path 类型仓库的 url 必须是相对路径,且只能写在主项目 composer.json
本地开发多模块时,把 repositories 写进子模块自己的 composer.json 是无效的。Composer 只认主项目根目录下 composer.json 的 repositories 数组,且 url 必须是相对于该文件的路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确写法:
"url": "modules/user"或"url": "./packages/my-utils";错误写法:"url": "/home/user/project/modules/user"、"url": "file:///xxx"、"url": "~/packages/my-utils" - 子模块目录下必须有合法
composer.json,含完整name(大小写敏感)和version字段,否则报Could not find a matching version of package - 验证路径是否可达:在主项目根目录执行
ls -la modules/user,能列出内容才算有效
COMPOSER_HOME 和 PATH 配置错位会导致全局命令静默失效
设了 COMPOSER_HOME 却没同步更新 PATH,或者路径含 ~、中文、空格,结果就是 laravel --version 找不到命令,且 Composer 不报错,只默默退回到默认路径。
-
COMPOSER_HOME必须是绝对路径,Linux/macOS 写成/home/user/.my-composer,Windows 写成C:\Users\User\AppData\Roaming\Composer,不能含$HOME或%USERPROFILE% -
PATH必须包含$COMPOSER_HOME/vendor/bin(Linux/macOS)或%COMPOSER_HOME%\vendor\bin(Windows),不是%APPDATA%\Composer\vendor\bin - 改完必须新开终端验证:
composer config --global home输出应与你设的一致;echo $PATH或echo %PATH%应含该 bin 路径
最常被忽略的是:改了 vendor-dir 后,所有代码里 require 'vendor/autoload.php' 都得手动改,IDE 的索引、CI 脚本里的 vendor/bin/phpunit 调用也得同步更新——这些不会自动迁移。

















