# @effected/spdx 中文文档

规范地址：https://npmcn.com/package/%40effected/spdx/

版本：0\.20\.0
npm 元数据更新时间：2026-11-10T15:08:12.701Z
中文译文更新时间：2026-11-13T09:15:29.666Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40effected/spdx
原文对照：https://npmcn.com/package/%40effected/spdx/?lang=original
项目主页：https://github.com/spencerbeggs/effected/tree/main/packages/spdx#readme
源码仓库：https://github.com/spencerbeggs/effected

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：113 kB，13 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=24\.11\.0
- 运行依赖：0 个
- peer 依赖：effect ~4\.1\.0
- 首次发布：2026-07-22T19:23:16.137Z
- 最新版本发布：2026-11-10T15:08:12.322Z
- 近 30 天下载量：8141（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：25（近 12 个月 25 个）

## 中文简介

SPDX 许可表达式为 Effect Schema 类

## 安装

```sh
npm install @effected/spdx
```

也可以使用：`pnpm add @effected/spdx`、`yarn add @effected/spdx`、`bun add @effected/spdx`

## README

# @ efficial/ spdx

[![npm](https://img.shields.io/npm/v/@effected%2Fspdx?label=npm&color=cb3837)](https://www.npmjs.com/package/@effected/spdx) [![License: MIT](https://img.shields.io/badge/License-MIT-4caf50.svg)](https://opensource.org/licenses/MIT) [![Node.js %3E%3D24.11.0](https://img.shields.io/badge/Node.js-%3E%3D24.11.0-5fa04e.svg)](https://nodejs.org/) [![TypeScript 7.0](https://img.shields.io/badge/TypeScript-7.0-3178c6.svg)](https://www.typescriptlang.org/)

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`](https://www.npmjs.com/package/@effected/pnpm-plugin-effected)。 。 。 .
> 
> **稳定:不稳定.** 此软件包的 API 表面尚未考虑 完成并可能改变 `0.x` 释放 定一个确切的版本——甚至 标记软件包 _稳定_ 在此之前 `1.0.0` 可以引入突破性更改 和精确的针 变成一个类型检查错误 而不是一个 跑步时间惊喜。 完全政策: [释放策略](https://github.com/spencerbeggs/effected#release-strategy)。 。 。 .

## 为什么 @ effect/ spdx

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

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

## 安装

```bash
npm install @effected/spdx effect
```

```bash
pnpm add @effected/spdx effect
```

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

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

## 快开始

验证单一许可证标识符 :

```ts
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` 需要运行时间 :

```ts
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` 而不是被彻底拒绝.

## 许可证

[麻省理工学院](https://npmcn.com/package/%40effected/spdx/LICENSE)

## 常见问题

### @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（3 天前）；至今共发布 25 个版本，其中过去 12 个月发布了 25 个；首次发布于 2026/07/23。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

