composer 修改 vendor 路径仅两种方式:全局改 vendor-dir(仅首次安装生效,需删 vendor 和 lock 后重装)或用 installer-paths 插件按 type 分流(需 composer/installers 且包自身声明合法 type)。

Composer 默认把所有依赖装进 vendor 目录,这个路径不能被命令行临时覆盖,也不能靠改配置“热切换”。想改安装位置,只有两条路可走:一是全局挪动整个 vendor 目录(有限制),二是按包类型或名称定向分流(需插件和约定)。选错路径或忽略前提,composer install 会照常执行但不生效,你根本看不到报错。
改 vendor-dir 只在首次安装时起作用
你可以在项目 composer.json 的 config 段里写:"vendor-dir": "third-party",但这只对空项目有效——也就是 vendor 文件夹还不存在时才管用。
- 已经运行过
composer install?改了vendor-dir也不会移动旧文件,下次update还往原vendor写 - 真要换路径,得先删掉
vendor和composer.lock,再跑composer install -
autoload.php路径会跟着变,代码里require 'vendor/autoload.php'得同步改成require 'third-party/autoload.php' - bin 文件(如
phpunit)也会生成到新路径下,脚本调用或 IDE 配置得手动更新
installer-paths 只对特定 type 的包生效
extra.installer-paths 看似灵活,实则门槛很高:它只匹配那些在自身 composer.json 里声明了 "type"、且该 type 被 composer/installers 插件支持的包。普通 library 类型(比如 monolog/monolog)完全不会被重定向。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 必须先
composer require composer/installers(推荐 v2.x) - 目标包的
type是写死的,你没法改第三方库的type字段 - 常见可用
type包括wordpress-plugin、laravel-library、symfony-bundle,但不是所有包都声明了这些 - 配置必须写在根项目
composer.json的extra下,结构是对象而非数组:"extra": { "installer-paths": { "wp-content/plugins/{$name}/": ["type:wordpress-plugin"] } }
用 path 仓库让本地包走符号链接
这是真正可控的“自定义路径”方式,但要求三处字符串**逐字符一致**:本地包 composer.json 里的 name、项目 composer.json 中 repositories 的 url(相对路径)、require 里的包名。
-
repositories必须放在项目composer.json根级,格式为[{ "type": "path", "url": "../my-utils" }],末尾不能带/ - 本地包必须有合法
composer.json,name只能含小写字母和短横线(acme/utils✅,Acme/Utils❌) - 本地包目录下必须有 Git commit(
git init && git add . && git commit -m "init"),否则 Composer 直接跳过 - 安装命令必须用
composer require acme/utils:dev-main,不是composer install;改了本地代码后刷新链接,得用composer update acme/utils
私有 Git 仓库依赖必须显式声明 repositories
想从公司内网 GitLab 或 GitHub 私有库拉包,不能只在 require 里写包名,必须在项目 composer.json 根级 repositories 数组里声明源地址,否则 Composer 根本不会去查。
-
type只能是vcs(对应 Git/SVN)或composer(对应 Satis/Packagist 兼容源),不能写git -
url必须是可git clone的地址,比如https://gitlab.example.com/myorg/utils.git,网页地址无效 - 认证靠
auth.json:必须放项目根目录或~/.composer/auth.json,权限设为600,域名 key 要和 URL 主机名完全一致(如gitlab.example.com) - 私有包自身的
name字段必须和require里写的字符串一模一样,大小写、分隔符都不能差
最常被忽略的一点:所有路径定制方案都依赖 Composer 对 composer.json 结构的严格解析——字段位置错一层、多一个逗号、少一个引号,它就静默跳过,而不是报错。验证是否生效,别只看 vendor 有没有文件,要跑 composer install -v 看日志里有没有 Reading composer.json of xxx 或 Writing lock file 后的路径输出。










