Composer 需显式配置 config.license 数组(如 ["MIT", "Apache-2.0"])并启用 --strict-licenses 才校验依赖许可证,匹配基于 SPDX 标识符且大小写敏感。

Composer 默认不检查包的许可证,但一旦启用 config.platform.allow-plugins 或项目启用了 require 时的协议校验(如通过 composer install --strict-licenses),就必须显式声明允许哪些开源协议,否则安装会失败。
如何在 composer.json 中配置允许的协议列表
通过 config.license 字段(注意:不是 license 顶层字段)设置白名单。该字段只在启用严格许可证检查时生效,例如 CI 环境或团队策略强制要求。
-
config.license必须是数组,每个元素为标准 SPDX 协议标识符(如"MIT"、"Apache-2.0"),不支持通配符或正则 - 若未设置此字段,Composer 在非严格模式下完全跳过许可证检查;即使设置了,也仅影响
install和update时对依赖包license字段的匹配 - 常见误写:
"config": { "license": ["MIT"] }—— 错,漏了license是config的子键,正确路径是config.license
{
"config": {
"license": ["MIT", "BSD-3-Clause", "Apache-2.0"]
}
}
哪些场景会触发协议检查?
协议列表只在明确启用校验逻辑时起作用,不是默认行为。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 运行
composer install --strict-licenses或composer update --strict-licenses时强制激活 - 某些企业版插件(如
composer/license-checker)可能自行读取config.license并执行校验 -
composer validate不检查协议合规性,它只校验 JSON 结构和必填字段 - 注意:
config.platform下的php、ext-xxx等与许可证无关,不要混淆
license 字段值怎么才算匹配成功?
Composer 使用宽松匹配:只要包的 license 值(字符串或字符串数组)中**至少一个**能被识别为白名单中的 SPDX ID,即视为通过。
- 例如包声明
"license": "MIT"→ 匹配["MIT"] - 包声明
"license": ["GPL-2.0-only", "MIT"]→ 只要白名单含"MIT"就放行 - 包声明
"license": "proprietary"或"unlicensed"永远不匹配任何开源协议白名单 - 非标准写法如
"license": "The MIT License"不会被识别为MIT,SPDX 匹配只认规范 ID,不解析自然语言
真正容易被忽略的是:这个配置本身不会自动开启检查,必须配合 --strict-licenses 或外部工具;而且 SPDX ID 大小写敏感,写成 "mit" 就失效。










