@effected/spdx

中文文档
0.20.0发布于 2026/11/10MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 8141

SPDX 许可表达式为 Effect Schema 类

中文使用文档
文档目录5 节
  1. 为什么 @ effect/ spdx
  2. 安装
  3. 快开始
  4. 特征
  5. 许可证

@ efficial/ spdx

npm License: MIT Node.js %3E%3D24.11.0 TypeScript 7.0

SPDX许可标识符,例外和许可表达作为Effect Schema类. License.parse 对照完整的SPDX许可证清单验证单一标识; SpdxExpression.parse 验证和解释整个表达式—— (MIT OR Apache-2.0), (中文(简体) ), GPL-2.0-only WITH Classpath-exception-2.0 ——输入一个打入的AST,而不是每个呼叫站点重排的字符串. 0运行时依赖性:SPDX数据集作为生成的TypeScript进行销售,而非从运行时的CJS软件包中读取.

预1.0.0。 。 。 . 此软件包是 @effected/* 在稳定基础上建造的工具包 效应v4(effect ~4.1.0) 并仍在 0.x 发展。 稳定效果 制作一个工具箱 1.0.0 可能,不是自动的。 为了保持你的 effect 财务报告和审定财务报表 @effect/* 该工具包在线上构建和测试、安装 @effected/pnpm-plugin-effected。 。 。 .

稳定:不稳定. 此软件包的 API 表面尚未考虑 完成并可能改变 0.x 释放 定一个确切的版本——甚至 标记软件包 稳定 在此之前 1.0.0 可以引入突破性更改 和精确的针 变成一个类型检查错误 而不是一个 跑步时间惊喜。 完全政策: 释放策略。 。 。 .

为什么 @ effect/ spdx

验证 a license 字段通常是指在运行时导入一个小的 CJS 解析器并相信它可以持续在模块系统之间工作——这是外国对很少改变的语法的依赖. 这个软件包卖出SPDX许可证和例外数据集是真实的,承诺了TypeScript代之以:708活用和26个被折旧的许可证标识符,加上66个例外,从静态数据中一次建造,在负载时间没有解析成本. 校验只针对实际用户输入,通过 parse 编号 : parseResult从不反对 ~734 已知的好目录条目.

语法本身被硬化的方式相同: 输入错误和一个未知的标识符都通过一个键入失败 InvalidSpdxExpressionError,从不作为抛出例外, 递归-后世解析器被深度封住, 所以一个敌意或意外被忽略的表达不能吹出堆栈。 差分测试套房 检查引擎与Cononical spdx-expression-parse 如果两者有分歧,规则是修补这个引擎,而不是测试.

安装

npm install @effected/spdx effect
pnpm add @effected/spdx effect

需要节点.js~~24.11.0. effect v4是唯一的对等依赖,也是任何种类的唯一依赖——没有IO,没有文件系统,没有网络.

全体 @effected/* 软件包仅为无害环境管理:只公布出口地图 import 条件,所以 require() 包括解析 CJS 模式的工具 —— 与节点失败 ERR_PACKAGE_PATH_NOT_EXPORTED 而不是装入不存在的 CJS 建筑。 从ES模块导入.

快开始

验证单一许可证标识符 :

import { License } from "@effected/spdx";
import { Effect } from "effect";

const program = Effect.gen(function* () {
  const mit = yield* License.parse("MIT");
  return [mit.id, mit.deprecated] as const;
});

console.log(Effect.runSync(program));
// => ["MIT", false]

同步检查整个许可证表达式, 无 Effect 需要运行时间 :

import { isValidExpression } from "@effected/spdx";

console.log(isValidExpression("(MIT OR Apache-2.0)"));
// => true
console.log(isValidExpression("MIT AND"));
// => false

特征

  • License - 经验证的SPDX许可证标识符(Schema.Class),与 parse (效力)和 parseResult (同步) Result(a) 构造器,一个 of(...) 已知良好价值的方便和静态前提 isKnownId, (中文(简体) ), isDeprecatedId 财务报告和审定财务报表 isLicenseRef。 。 。 .
  • 向供应商数据集的元数据发放许可证 License数字 : name 财务报告和审定财务报表 referenceUrl (两者) Option, (中文(简体) ), none (单位:千美元) LicenseRef- 标识符列表未描述)和 osiApproved 编号 : fsfLibre 标记,用于需要超过标识符的UI或政策门.
  • LicenseException - 与SPDX例外识别符相同的模式,有自己的目录和 parse 编号 : parseResult 编号 : of。 。 。 .
  • SpdxExpression - 递归许可证表示AST(LicenseNode, (中文(简体) ), LicenseRefNode, (中文(简体) ), WithExceptionNode, (中文(简体) ), AndNode, (中文(简体) ), OrNode),结果 parse时,同步 isValidExpression 上游,一个 FromString 用于嵌入到您自己的计划中的编码器, 以及一个条形的, 完全亲和的 .toString()。 。 。 .
  • SpdxExpression.licensesOf 编号 : SpdxExpression.primaryLicense ——每个许可一个表达式名称,按书面顺序并被复制,以及一个只显示一个适合的地方. primaryLicense 是故意的,这是故意的 none 用于 AND 表达方式:组合同时强制其所有条款,所以其中没有人代表整体,选择一方会错误地表述义务. 到达 licensesOf 只要能显示一个以上的地方.
  • InvalidSpdxExpressionError ——软件包的单打出错误;不正确的语法和一个未知的标识符都通过它失败了,从不作为缺陷.
  • 已过期的许可证和例外标识符成功解析并携带 deprecated: true 而不是被彻底拒绝.

许可证

麻省理工学院

版本与发布记录

@effected/spdx 共发布 25 个版本,首次发布于 2026/07/23;过去 12 个月发布了 25 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.20.0latest2026/11/102 天前
0.19.02026/11/0310 天前
0.18.02026/11/0112 天前
0.17.02026/10/2915 天前
0.16.12026/10/2618 天前
0.16.02026/10/2321 天前

关于 @effected/spdx 的常见问题

@effected/spdx 是什么?

SPDX 许可表达式为 Effect Schema 类

如何安装 @effected/spdx?

在项目目录运行 npm install @effected/spdx,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:effect(~4.1.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@effected/spdx 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@effected/spdx 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@effected/spdx 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24.11.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@effected/spdx 可以商用吗?

@effected/spdx 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@effected/spdx 的下载量有多少?

根据 npm 官方下载统计,@effected/spdx 在 2026/10/13 – 2026/11/11 这 30 天内被下载 8,141 次,日均约 271 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@effected/spdx 还在维护吗?

最新版本 0.20.0 发布于 2026/11/10(2 天前);至今共发布 25 个版本,其中过去 12 个月发布了 25 个;首次发布于 2026/07/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。