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

config 里的 process-timeout 设多少才不超时又不浪费资源
Composer 安装或更新卡在 “Loading composer repositories with package information” 或 “Updating dependencies” 很久,大概率是 process-timeout 太小——它控制的是每个外部命令(比如 git clone、svn 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.json 的 config 里留着 "plugin-autoloader": true 或类似字段——这不仅无效,还可能触发 Composer 2.2+ 的警告甚至报错:The "fxp/composer-asset-plugin" plugin requires composer-plugin-api 1.0.0, this *N*.* is not supported.
- 删掉所有含
fxp、plugin-autoloader、asset相关的config键值对 - 如果项目仍依赖 Bower/NPM 包(如
jquery、bootstrap),改用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.lock 里 packages 和 packages-dev 数组是否按字母序排列。默认 false,但强烈建议设为 true——这不是“美观问题”,而是协作效率问题。
- 关闭时,每次
composer require新包,新条目总追加到数组末尾,多人同时增删依赖会导致composer.lock出现大量无意义 diff(同一包在不同人机器上位置不同) - 开启后,所有包按
name字母序固化,Git 合并冲突大幅减少,diff只反映真实变更 - 注意:该配置只影响新生成的
lock文件,已有lock不会自动重排;需先删composer.lock,再运行composer install重建
私有仓库认证信息别硬编码进 config
有人把 GitLab 或 Nexus 的 token 直接写在 composer.json 的 config.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 字符串,这才是标准链路。









