Composer.json中config项怎么配_Composer高级配置参数指南【配置】

5次阅读

process-timeout建议设为600(开发机)或1800(ci/cd),禁用超时应通过环境变量而非config;fxp-asset插件已废弃,需删除相关配置并改用asset-packagist.org;sort-packages应设为true以提升协作效率;私有仓库认证信息必须通过auth.json管理,禁止硬编码。

Composer.json中config项怎么配_Composer高级配置参数指南【配置】

config 里的 process-timeout 设多少才不超时又不浪费资源

composer 安装或更新卡在 “Loading composer repositories with package information” 或 “Updating dependencies” 很久,大概率是 process-timeout 太小——它控制的是每个外部命令(比如 git clonesvn export)的最长执行时间,单位秒,默认只有 300(5 分钟)。

真实场景下,私有 gitlab 仓库响应慢、CI 环境带宽受限、或拉取大体积包(如含二进制的 laravel/sail)时,300 秒根本不够。但设成 0(禁用超时)也不推荐:万一网络彻底卡死或远程服务假死,Composer 会无限挂起,CI 流水线直接阻塞。

  • 普通开发机建议设为 600(10 分钟),兼顾稳定性与响应感
  • CI/CD 环境可设为 1800(30 分钟),并配合超时兜底(如 github Actions 的 timeout-minutes
  • 绝对不要在 config 里写 "process-timeout": 0,改用环境变量 COMPOSER_PROCESS_TIMEOUT=0 临时覆盖更安全

fxp-asset 已废弃,config.plugin.autoload 还要不要配

2018 年后 Composer 2.x 原生支持 fxp/composer-asset-plugin 的等效能力(通过 asset-packagist.org 或自建 asset VCS),所以这个插件本身已停更。但很多人还在 composer.jsonconfig 里留着 "plugin-autoloader": true 或类似字段——这不仅无效,还可能触发 Composer 2.2+ 的警告甚至报错:The "fxp/composer-asset-plugin" plugin requires composer-plugin-api 1.0.0, this *N*.* is not supported.

  • 删掉所有含 fxpplugin-autoloaderasset 相关的 config 键值对
  • 如果项目仍依赖 Bower/npm 包(如 jquerybootstrap),改用 asset-packagist.org 作为仓库:"repositories": [{"type": "composer", "url": "https://asset-packagist.org"}]
  • 确认 composer.lock 中不再出现 fxp/composer-asset-plugin 的条目,否则运行 composer update --lock 清理

config.sort-packages 开关影响 lock 文件可维护性

sort-packages 控制 composer.lockpackagespackages-dev 数组是否按字母序排列。默认 false,但强烈建议设为 true——这不是“美观问题”,而是协作效率问题。

  • 关闭时,每次 composer require 新包,新条目总追加到数组末尾,多人同时增删依赖会导致 composer.lock 出现大量无意义 diff(同一包在不同人机器上位置不同)
  • 开启后,所有包按 name 字母序固化,Git 合并冲突大幅减少,diff 只反映真实变更
  • 注意:该配置只影响新生成的 lock 文件,已有 lock 不会自动重排;需先删 composer.lock,再运行 composer install 重建

私有仓库认证信息别硬编码进 config

有人把 GitLab 或 Nexus 的 Token 直接写在 composer.jsonconfig.gitlab-token 或自定义键里,这是严重安全隐患:一旦代码推送到公开仓库或被误提交,凭据立刻泄露。

  • 一律用 auth.json 管理凭证:~/.composer/auth.json(全局)或项目根目录下的 auth.json(需加 .gitignore
  • 格式必须严格:{"http-basic": {"your.repo.tld": {"username": "xxx", "password": "yyy"}}, "gitlab-token": {"gitlab.com": "zzz"}}
  • config 里只保留仓库声明,例如:"repositories": [{"type": "composer", "url": "https://your.repo.tld/packages.json"}],认证由 auth.json 自动匹配域名

哪怕只是本地开发,也别图省事往 config 里塞密码——CI 环境通常靠环境变量注入 token,而 auth.json 支持从 COMPOSER_AUTH 读取 JSON 字符串,这才是标准链路。

text=ZqhQzanResources