composer怎么配置项目的许可证_composer license声明【指南】

4次阅读

composer 的 license 字段是元数据,仅用于描述且须置于 composer.json 根级;单许可证用字符串(如 “MIT”),多许可证用数组(如 [“MIT”, “apache-2.0”]);Packagist 仅在字段合法且已索引时显示;该字段无法律效力,真实授权依赖 LICENSE 文件、SPDX 注释及分发内容。

composer怎么配置项目的许可证_composer license声明【指南】

Composer 项目许可证声明不是靠单独配置某个 license 键“生效”的,它本质是 composer.json 中一个**元数据字段**,仅用于描述、归档和生态协作,不参与依赖解析、安装或运行时行为。

license 字段写在哪、怎么写才被识别

必须写在 composer.json 的根级(顶层)对象中,键名为 license,值为字符串或字符串数组

  • 单许可证:用字符串,如 "MIT""Apache-2.0""GPL-3.0-only"
  • 多许可证(“或”关系):用数组,如 ["MIT", "GPL-3.0-or-later"];注意不能写成 "MIT OR GPL-3.0" 这类自由文本
  • 非标准许可证:可写 "proprietary" 或自定义字符串(如 "Custom-Commercial"),但 Packagist 不会验证其合法性,也不提供 SPDX 映射

示例片段:

{     "name": "acme/utils",     "description": "Helper functions",     "license": ["MIT", "Apache-2.0"] }

为什么 packagist.org 上看不到 license?

Packagist 仅显示 composer.json 中的 license 字段,但前提是:

  • 该字段存在且格式合法(字符串或字符串数组
  • 包已成功提交并被索引(新提交可能延迟几分钟)
  • 没有因语法错误导致整个 composer.json 解析失败(可用 composer validate 检查)

常见失效原因:"license": "MIT "(尾部空格)、"license": NULL"license": {}、或把 license 写在 requireautoload 下面——这些都会让 Packagist 忽略该字段。

license 和实际法律效力的关系

license 字段本身不生成 LICENSE 文件,也不自动添加头部注释。它只是声明,真正的法律约束力来自:

  • 项目根目录是否存在对应名称的 LICENSELICENSE.md 文件(内容需完整、无删减)
  • 代码文件中是否包含合规的 SPDX 标识(如 // SPDX-License-Identifier: MIT
  • 分发方式(如 Packagist 下载 zip 包是否含 LICENSE 文件)

也就是说:只改 composer.json 里的 license,不放真实许可证文件,等于没授权。

最容易被忽略的是:SPDX 短标识符(如 MIT)必须与 SPDX 官方列表 严格一致,大小写敏感,带连字符的不能省略(AGPL-3.0-onlyAGPL-3.0)。

text=ZqhQzanResources