项目级repositories配置会完全屏蔽全局镜像,只要composer.json中存在repositories字段(无论值为{}、[]或{"packagist.org": false}),composer就彻底跳过全局repo.packagist配置,这是硬编码规则:项目>全局>默认。

项目级 repositories 配置会完全屏蔽全局镜像
只要 composer.json 里存在 repositories 字段(哪怕值是 {}、[] 或 {"packagist.org": false}),Composer 就彻底跳过读取全局的 repo.packagist 配置——不是“优先级低”,是根本不会加载。这个行为从 Composer 2.0 起就是硬规则:项目 > 全局 > 默认。
常见误判场景:
- CI 脚本用
sudo composer config -g写进/root/.composer/config.json,但构建进程以www-data用户运行,压根看不到 root 的配置 - 宝塔面板后台执行命令默认是
www用户,你在终端用自己的账号配的全局镜像对它无效 - 项目
composer.json已有"repositories": [],此时再怎么配composer config -g repo.packagist都白搭
全局 ssl.cafile 必须用 --global,且文件格式和权限要严格满足
ssl.cafile 是为 HTTPS 私有仓库配置自定义 CA 证书的唯一方式,但它必须走全局配置才真正生效。在项目目录下执行 composer config ssl.cafile /path/to/ca.pem 只会写进当前 composer.json,而 Composer 的 SSL 认证发生在网络层,需要所有进程都加载该证书。
实操要点:
- 统一用
composer config --global ssl.cafile /etc/ssl/certs/company-ca.pem - 证书文件必须是 PEM 格式、完整证书链(中间 CA 在前,根 CA 在后),不能有 BOM、空行或注释
- PHP 进程得有读权限:用 nginx/php-fpm 时,
www-data用户可能无权读取家目录下的文件,建议放系统可信路径如/etc/ssl/certs/ - Composer ≥2.5 不会报错提示证书加载失败,而是静默 fallback 到系统 CA,结果还是
cURL error 60
全局 require 和项目 require 的二进制调用逻辑完全不同
全局安装工具(如 php-cs-fixer)是为了跨项目复用,但它的可执行文件只存在于 ~/.composer/vendor/bin/(Linux/macOS)或 %APPDATA%\Composer\vendor\bin(Windows),不加进 PATH 就等于没装。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
项目内安装(如 composer require phpunit/phpunit)则把二进制放在 ./vendor/bin/phpunit,它天然隔离、版本锁定,但不能直接敲 phpunit 命令运行。
正确做法:
- 全局工具:确认
~/.composer/vendor/bin已加入PATH,并重启终端验证which php-cs-fixer - 项目工具:用
./vendor/bin/phpunit(Linux/macOS)或vendor\bin\phpunit(Windows)调用;或在composer.json的scripts里定义别名,如"test": "php vendor/bin/phpunit",之后跑composer test
私有包认证凭据应优先项目级管理
GitHub/GitLab 的 OAuth Token 如果存于全局 auth.json,可能在多项目共用时造成权限越界或拉取失败——尤其当不同项目对应不同组织、不同访问策略时。
推荐方式:
- 删掉全局
auth.json,改用项目级认证:在项目根目录运行composer config http-basic.github.com username token,它会把凭据写进当前项目的auth.json - 配合
composer validate检查语法,避免因 JSON 格式错误导致 Composer 回退到全局行为 - 若使用 CI,把 token 设为 secret 环境变量,在构建脚本中动态写入项目级
auth.json,而不是依赖全局配置










