缺失 license 文件是上游包未声明 license 字段所致,与 Composer 下载行为、镜像源或缓存无关;它仅触发合规警告,不影响安装运行,修复需上游补全 composer.json 中的 license 字段。

缺失 license 文件不是 Composer 下载行为导致的,而是上游包本身没声明 license 字段——镜像源、下载方式、缓存清理都解决不了这个问题;它只影响合规检查和 --strict-license 模式下的中断,不阻碍安装或运行。
为什么 composer install 会报 “No licenses specified”
这个警告来自被依赖包的 composer.json 缺少 license 字段,不是你本地配置错误,也不是镜像漏传文件。Composer 在解析每个包元数据时读取该字段,若为空就触发提示。
- 常见于开发中未发布的包、私有仓库、老旧维护项目或作者疏忽提交
-
composer show vendor/package输出里没有License行,就是源头缺失 - 镜像源(如阿里云、腾讯云)只同步元数据和 dist 包,不会补全上游缺失的字段
- 即使切回官方源
https://packagist.org,警告依然存在——问题在包,不在源
如何绕过 license 警告继续安装
如果你无法修改上游包,又不想被警告干扰 CI 或本地开发流程,可临时禁用严格检查:
- 在项目
composer.json的config块中添加:"strict-license": false - 避免使用
composer install --strict-license或composer update --strict-license - 注意:
--strict-license是 Composer 2.2+ 新增参数,旧版本不识别,也不会报错 - 不要靠
composer config --global strict-license false—— 该配置项不支持全局设置,只作用于当前项目
镜像源配置对 license 问题毫无帮助,但必须配对才能稳定下载
虽然换镜像不能修复 license 缺失,但国内镜像能避免因元数据拉取失败导致的“假性缺失”(比如卡在 Resolving dependencies 阶段,误以为包有问题)。正确配置是前提:
- 命令必须是:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(注意repo.packagist、composer类型、末尾/) - 配完立刻执行:
composer clear-cache,否则旧缓存可能让 Composer 仍尝试请求packagist.org - 验证是否生效:
composer config -g repo.packagist应输出完整 JSON,且composer install -vvv | grep packages.json显示镜像域名 - 如果项目
composer.json里已有repositories字段,全局镜像会被覆盖——此时要手动确保"packagist": false不被误删
真正要解决 license 缺失,得 upstream 提交 PR 补上 "license": "MIT" 这类声明;所有本地配置只是应对策略。最容易被忽略的是:你以为在修下载问题,其实是在处理一个上游治理问题。


















