# @nx-lang/language-core 中文文档

规范地址：https://npmcn.com/package/%40nx-lang/language-core/

版本：0\.10\.0
npm 元数据更新时间：2026-11-02T01:24:03.787Z
中文译文更新时间：2026-11-02T01:37:40.907Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40nx-lang/language-core
原文对照：https://npmcn.com/package/%40nx-lang/language-core/?lang=original
项目主页：https://nxlang.org/
源码仓库：https://github.com/nx-lang/nx

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

- 包体积（解压后）：39.8 kB，19 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.0\.0
- 运行依赖：1 个
- 首次发布：2026-09-15T04:50:40.765Z
- 最新版本发布：2026-11-02T01:24:03.487Z
- 已发布版本数：10（近 12 个月 10 个）

## 中文简介

无传输的NX语言查询回答：主机上下文、快照缓存和进程内的NxLanguageService。

## 安装

```sh
npm install @nx-lang/language-core
```

也可以使用：`pnpm add @nx-lang/language-core`、`yarn add @nx-lang/language-core`、`bun add @nx-lang/language-core`

## README

# @nx-lang /语言核心

NX语言服务的那一半与传输无关：主机上下文 内容键控快照缓存、查询调度程序和的进程内实现 [`@nx-lang/language-protocol`](https://npmcn.com/package/%40nx-lang/language-protocol)的 `NxLanguageService`.

它上面有两个东西，任何一个都不能和另一个在行号上有分歧，因为 dispatcher只有一个副本，查询的文本被准确地分析，因为它被发送：

-   [`@nx-lang/language-http`](https://npmcn.com/package/%40nx-lang/language-http) 添加请求解析、正文限制、错误响应和 一个Node监听器，从 [`@nx-lang/sdk-node`](https://npmcn.com/package/bindings/node).
-   [`@nx-lang/sdk-wasm`](https://npmcn.com/package/bindings/wasm) 将它绑定到来自WebAssembly主机的快照，所以a 浏览器的答案会像服务器一样悬停。

包不从 `node:`。它运行在浏览器、Web Worker和Node中。

## 进程内服务

```ts
import { createSnapshotLanguageService } from "@nx-lang/language-core";

const service = createSnapshotLanguageService({
  createSnapshot: (documents, { implicitImports }) =>
    host.createLanguageSnapshot(documents, { implicitImports }),
  context: {
    documents: [{ uri: "nx://host/catalog.nx", identity: "catalog.nx", source: catalogSource }],
    implicitImports: ["catalog.nx"]
  },
  cacheSize: 8
});

const hover = await service.hover({ documents, uri, position }, signal);
```

结果实现 `NxLanguageService`,所以 `@nx-lang/monaco` 还有其他的客户 Interface在不知道分析发生在哪里的情况下获取它。

`sourceTree` 将文档的每个部分作为类型化节点进行应答，并将声明作为节点 指的是;协议的README描述了答案。它是 **不稳定**它的形状可能会改变 任何版本，直到下一个版本提交到它。 `sourceEdit` 回答文本编辑，使一个 改变读者在树的一个节点上的要求，或者为什么不能做；它也不稳定。 `dispose()` 释放所有缓存 分析;服务人员随后再次回答，重新分析。

答案在调用线程上同步产生，因此只能观察到取消 在工作开始之前：一个已经流产的 `signal` 拒绝。 `AbortError` 什么也不要求 快照。无论谁在调用者的线程上运行服务- playground都在 Worker -是使cancel抢占的原因。

## 快照和缓存

一、 `SnapshotLike` 是调度员需要的小平面： `hover`， `completions`， `diagnostics`， `documentSymbols`， `sourceTree`， `sourceEdit`， `dispose`。这两个sdk的快照都满足它，并且可以进行测试 就因为一个假的。

`documentSetKey` 按文档集自己的内容（URI、标识和源）进行分析 前面加上它的长度，所以没有两个集合可以连接成同一个字符串。文档的 `version` 剩下的 这是故意的：它是编辑器的计数器，而不是内容，并且同一文本下的新数字有 同样的分析。调度程序将当前请求的版本放回应答中，因此a 丢弃版本答案的客户端仍然看到自己的版本。

`SnapshotCache` 保存最近使用的分析并处理它驱逐的内容。盘旋的风暴 一秒钟内多次发送相同的文本；保留最后几套是让答录机变得便宜的原因 一个线程。

## 主机环境

具有自己声明的主机（例如外部组件的目录）将它们作为 `context`： `documents` 连接每个查询的文档集，而不需要客户端发送它们 `implicitImports`，每个查询文档导入的标识，就好像它以通配符开头一样 每个的导入。

没有任何内容被添加，也没有任何位置被重写：

-   被查询的位置是客户端发送的位置，快照被准确地询问；
-   悬停范围、文档符号范围和诊断范围将返回所查询的范围 文件本身的行、列；
-   位于上下文文档中的诊断在下面报告 **文档的** URI，有它自己的 坐标，因此宿主声明中的错误永远不会显示在作者编写的行中；
-   相关位置不需要调整，无论它指向哪里。

文档中包含上下文文档的URI或标识的查询被拒绝：客户端 不能替换主机的上下文。 `contextCollision(documents, context)` 是check， HTTP 处理程序的答案 `400 invalid-request` 命名身份。

### 迁移从 `prelude`

这个 `prelude` 选项将主机的文本置于所查询的文档之前，并移动每个位置。 它被删除，并且仍然通过它的调用在使用消息命名构建时失败 `context`. 替换的是两行：

```ts
// Before
createSnapshotLanguageService({ createSnapshot, prelude: { source: catalogSource } });

// After
createSnapshotLanguageService({
  createSnapshot,
  context: {
    documents: [{ uri: "nx://host/catalog.nx", identity: "catalog.nx", source: catalogSource }],
    implicitImports: ["catalog.nx"]
  }
});
```

`preludeOffsets`， `withPrelude`， `shiftPositionIn`， `shiftRangeOut` 和 `PRELUDE_ORIGIN` 被删除 用它;再也没有什么变化了，所以他们没有什么可做的。

## 构建和测试

```bash
pnpm --filter @nx-lang/language-core build
pnpm --filter @nx-lang/language-core test
```

## 常见问题

### @nx-lang/language-core 是什么？

无传输的NX语言查询回答：主机上下文、快照缓存和进程内的NxLanguageService。

### 如何安装 @nx-lang/language-core？

在项目目录运行 npm install @nx-lang/language-core，或使用 pnpm add / yarn add / bun add。

### @nx-lang/language-core 支持 TypeScript 吗？

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

### @nx-lang/language-core 支持 ESM 还是 CommonJS？

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

### @nx-lang/language-core 需要什么版本的 Node\.js？

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

### @nx-lang/language-core 可以商用吗？

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

### @nx-lang/language-core 还在维护吗？

最新版本 0\.10\.0 发布于 2026/11/02（1 天前）；至今共发布 10 个版本，其中过去 12 个月发布了 10 个；首次发布于 2026/09/15。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

