Composer install 默认安装到 vendor 目录,唯一合法自定义路径方式是在 composer.json 的 config → vendor-dir 中配置相对路径,如 "my-vendor",之后运行 install 即生效;全局设置或符号链接均不推荐且存在兼容性风险。

Composer install 默认安装到 vendor 目录,不能直接改路径
执行 composer install 时,它只会把依赖包装进项目根目录下的 vendor 文件夹,不接受类似 --target 或 -d 这样的路径参数。硬加参数会报错:Unknown option --target。这不是 bug,是设计如此——Composer 的 autoloader、autoload 配置、PSR-4 映射全部基于 vendor 的固定位置生成。
想换安装路径?必须改 composer.json 的 config → vendor-dir
唯一受支持的自定义方式,是在项目根目录的 composer.json 中配置 config 字段:
{
"config": {
"vendor-dir": "my-vendor"
}
}
之后再运行 composer install,依赖就会装进 my-vendor 而不是 vendor。注意几点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
vendor-dir必须是相对路径(不能以/开头),且不能包含..向上跳转 - 修改后首次运行
composer install会清空旧vendor并重建新目录;已有vendor不会自动迁移 - 如果项目已提交了
vendor到 Git,记得更新 .gitignore,把旧路径删掉、加上新路径 - 所有依赖的 autoloader(如
vendor/autoload.php)会变成my-vendor/autoload.php,代码里 require 路径也得同步改
全局设置 vendor-dir?不推荐,且只影响新项目
可以用 composer config -g vendor-dir /path/to/global/vendor 设置全局默认值,但这个值仅在 composer create-project 或新建项目时生效,对已有项目的 composer install 没用。而且全局路径一旦设成绝对路径,多人协作或 CI 环境容易出问题——比如 CI 机器上该路径不存在或权限不足,直接导致安装失败。
为什么不用 symlink 或 post-install-cmd 替代?
有人试过用 post-install-cmd 把 vendor 移走再软链回来,或者用脚本重命名目录。这看似可行,但风险高:
- Composer 的 autoload 生成逻辑在安装过程中就锁死了路径,中途移动会导致
class not found - 某些插件(如
hirak/prestissimo或composer-unused)会扫描vendor目录结构,路径不匹配就失效 - PHP 的 opcache 可能缓存了旧的 autoloader 路径,重启 Web 服务也不一定立刻刷新
真要隔离依赖目录,优先走 config.vendor-dir;如果连这个都受限(比如共享主机不允许改 composer.json),那说明环境本身就不适合 Composer 标准流程,得考虑其他部署方案,而不是强行绕开路径约束。

















