config.vendor-dir是唯一真正生效的vendor路径配置,必须在项目根目录composer.json的config字段下用相对路径设置,删旧vendor后运行install才生效;需同步修改autoload引入路径、bin-dir及ci脚本中的硬编码路径。

config.vendor-dir 是唯一真正生效的 vendor 路径配置
想把所有包装进 third-party 或 libs 而不是默认 vendor,只能靠项目根目录 composer.json 里的 config.vendor-dir。其他方式——比如环境变量 COMPOSER_VENDOR_DIR(Composer 2.x 已废弃)、composer install -d 参数、或只改 extra.installer-paths——全都不起作用或只在极特殊条件下生效。
必须同时满足三点:
-
config字段写在项目根目录composer.json的最外层,不能缩进错位、不能塞进extra或scripts - 值必须是相对路径,如
"third-party",不能以/开头,也不能含~或$HOME - 改完后必须手动删掉旧
vendor目录,再运行composer install;composer update不会迁移已有包
改完之后,third-party/autoload.php、third-party/bin/ 下的命令、以及自动生成的类映射,全部指向新路径。但代码里所有 require 'vendor/autoload.php' 都得手动改成 require 'third-party/autoload.php',否则直接报错。
bin-dir 必须和 vendor-dir 同步配置,否则命令链断裂
bin-dir 控制可执行文件(如 phpunit、laravel-zero)的软链接位置。它默认是 vendor/bin,但如果你改了 vendor-dir,却没同步改 bin-dir,那这些命令就“存在但不可用”——因为软链接目标路径失效了。
正确做法是:在同一个 config 块里一起声明:
"config": {
"vendor-dir": "third-party",
"bin-dir": "third-party/bin"
}
注意:bin-dir 值必须是相对于项目根的路径,且要匹配 vendor-dir 下的实际子目录结构。如果用了 composer create-project,首次安装可能忽略该配置,建议安装完立刻检查 third-party/bin/ 是否有对应文件。
CI 脚本或部署命令中硬编码的 vendor/bin/phpunit 也必须同步更新为 third-party/bin/phpunit,否则流水线会失败。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
installer-paths 只对特定 type 的包生效,普通库不走这条路
extra.installer-paths 看起来像“按包名指定安装路径”,但它根本不是通用路径重定向机制。它只在三个条件全部满足时才触发:
- 你的项目已通过
composer require composer/installers引入了 installer(且版本 ≥ 2.0) - 目标包自己的
composer.json中明确声明了"type": "wordpress-plugin"这类非library的类型 - 你删掉了整个
vendor和composer.lock,再重新composer install
普通 PHP 库(type: library)哪怕写进 installer-paths 规则里,也照旧进 vendor(或你配的 vendor-dir)。很多人卡在这一步,以为配置错了,其实是类型不匹配。
示例中 "wp-content/plugins/{$name}/": ["type:wordpress-plugin"] 里的 {$name} 是占位符,会被替换成包名最后一段(如 acme/my-plugin → my-plugin),路径必须相对于项目根,不能以 / 开头。
cache-files-dir 必须显式指向 files 子目录,只设 cache-dir 无效
Composer 下载的 zip 包、解压后的 dist 文件,实际存放在 cache-files-dir 路径下,而不是 cache-dir 根目录。只运行 composer config --global cache-dir ~/.composer/cache 是没用的——它不会影响下载缓存行为。
必须显式设置 cache-files-dir,且值必须包含 files 子目录:
- Linux/macOS:
composer config --global cache-files-dir ~/.composer/cache/files - Windows:
composer config --global cache-files-dir "%APPDATA%\Composer\Cache\files"(注意 PowerShell 中%APPDATA%不自动展开,建议先查清真实路径)
更关键的是:COMPOSER_CACHE_DIR 环境变量优先级最高,一旦设置就会完全覆盖所有 config 设置。CI/CD 中缓存失效,大概率是因为这个变量被设了但路径不对,或者压根没设。验证方式:运行 php -r "echo getenv('COMPOSER_CACHE_DIR');",输出必须是非空绝对路径。










