# @nx-lang/monaco 中文文档

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

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

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

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

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

- 包体积（解压后）：50.9 kB，7 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.0\.0
- 运行依赖：1 个
- peer 依赖：shiki ^4\.0\.0，monaco-editor \>=0\.52\.0，@shikijs/monaco ^4\.0\.0，@nx-lang/language \>=0\.1\.0
- 首次发布：2026-09-15T04:50:42.626Z
- 最新版本发布：2026-11-02T01:24:07.626Z
- 已发布版本数：10（近 12 个月 10 个）

## 中文简介

针对NX的一个Monaco集成：通过Shiki突出显示已发布的语法，在NxLanguageService上悬停和补全，以及从诊断到标记的映射。

## 安装

```sh
npm install @nx-lang/monaco
```

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

## README

# @nx-lang /摩纳哥

一个摩纳哥集成的NX，由每个NX网络编辑共享： `nx` 语言及其影响因素 配置从 `@nx-lang/language`，突出显示 [志贵](https://shiki.style/) 与 包的TextMate语法，悬停和完成 `NxLanguageService`的映射 协议诊断到编辑器标记。无框架-主机与之组合 `monaco.editor.create` 或者 `@monaco-editor/react` 随它的便。

```ts
import * as monaco from "monaco-editor";
import { registerNxLanguage } from "@nx-lang/monaco";
import { createHttpLanguageService } from "@nx-lang/language-client";

const registration = registerNxLanguage(monaco, {
  service: createHttpLanguageService({ baseUrl: "/api/language" }),
});

const editor = monaco.editor.create(container, {
  value: source,
  language: "nx",
  theme: "github-dark",
});
```

## 同行依赖性

主机安装 `monaco-editor`， `shiki`， `@shikijs/monaco`, `@nx-lang/language`，所以有 一个摩纳哥在页面上，主机控制版本。支持Monaco 0.52.0及更高版本：every 包调用的API存在于那里，并且包是根据0.52的声明编译的。直到 `@nx-lang/language` 在注册表上，使用此存储库的主机通过路径链接它，对吗 这个存储库的工作空间(`"@nx-lang/language": "file:../../src/vscode"`）。

包永远不会导入 `monaco-editor` 本身;它只使用交给它的名称空间。那 namespace可以是一个ES模块导入，什么 `@monaco-editor/react` 传递给 `beforeMount`，或 `monaco` 全球一个amd装载摩纳哥离开 `window` - BlazorMonaco是这样加载的-所以 拥有自己的摩纳哥的主机永远不会在页面上留下第二份副本。

```js
// An AMD-loaded Monaco: the global is the namespace.
registerNxLanguage(window.monaco, { service });
```

## `registerNxLanguage(monaco, options?)`

用给定的Monaco名称空间注册NX，并返回一个句柄 `dispose()` 和一个 `ready` 保证在高亮笔加载后解析。

| 选项 | 默认的 | 意义 |
| --- | --- | --- |
| `service` | 无 | 一个 `NxLanguageService`。其中一个是注册悬停和完成提供程序；没有，只有高亮显示和语言配置。 |
| `workspace` | 模型本身 | `(model) => LanguageDocument[]`：对文档设置查询 `model` 被要求反对。 |
| `themes` | `["github-light", "github-dark"]` | 通过绑定的名称或主题对象在Monaco中加载和定义Shiki主题。选一个有编辑签名的 `theme` 选择或 `monaco.editor.setTheme`;如果没有选择，一旦荧光笔加载，第一个就会激活。 |
| `onError` | 无 | 当服务调用被拒绝或高亮显示加载失败时调用。没有东西被扔进摩纳哥。 |

**医生的评论。** 每个加载的主题都有Markdown的规则 `///` Doc注释，所以是这样的 在其他编辑器中使用文档的方式，而不是Markdown文件的方式： `**bold**` 和 `*italic*` 保留注释的颜色并只更改字体，代码跨度采用主题的颜色 代码跨度颜色，以及文档链接，如 `[Name]` 使用带有下划线的颜色(注释的 颜色（下划线，在没有代码跨度颜色的主题中）。 `withNxDocCommentStyles(theme)` 应用 对于以其他方式定义主题的主机，主题对象也适用相同的规则。

**幂等。** 对同一个Monaco名称空间的重复调用将返回现有名称空间的句柄 注册而不是再次注册，所以 `@monaco-editor/react`的 `beforeMount` 和 `onMount` pair和React严格模式的双挂载，注册一组提供商和每个完成 出现一次。没有服务的调用只注册高亮显示；第一个后来叫那个 将悬停和完成提供程序添加到现有的注册中，因此是一个宿主 在它的服务准备好之前设置高亮仍然得到他们。当 处置最后一个句柄；语言，它的结构和荧光笔都保留了下来，因为 摩纳哥没有办法取消一种语言的注册，而在此之后进行的注册则会重新使用它们 然后再装上荧光笔。一个React效果，在mount时注册，在cleanup时销毁 因此，无论它运行的频率有多高，都需要一个高光笔负载。

**主题。** 荧光笔加载后 `registerNxLanguage` 的回报。之前选择的主题 `ready` 解决,通过 `monaco.editor.setTheme` 或者是编辑的 `theme` 选择权，一旦有了就保留，所以 上面的例子都不需要等待 `ready` 让它的主题保持不变。一个不属于 `themes` 保持编辑器的主题，但高亮笔无法为其重新上色，并保持在其第一个。

**的位置。** 摩纳哥的一基行和一列成为协议的零基行和UTF-16 字符和答案范围以另一种方式返回。模型的文本在的时刻被读取 编辑后立即悬停的查询询问已编辑的文本。摩纳哥 取消令牌终止服务调用。

**悬停代码块** 由摩纳哥自己的着色器通过代币提供商Shiki突出显示 使用与缓冲区相同的语法进行安装。

## 与 `@monaco-editor/react`

```tsx
import Editor, { type BeforeMount, type OnMount } from "@monaco-editor/react";
import { registerNxLanguage, setNxMarkers } from "@nx-lang/monaco";
import { createHttpLanguageService } from "@nx-lang/language-client";

const service = createHttpLanguageService({
  baseUrl: "/api/language",
  headers: async () => ({ authorization: `Bearer ${await getToken()}` }),
});

// A multi-file configuration: the model being edited plus its siblings, with unsaved text.
const beforeMount: BeforeMount = (monaco) => {
  registerNxLanguage(monaco, {
    service,
    workspace: (model) => [
      { uri: model.uri.toString(), source: model.getValue(), version: model.getVersionId() },
      ...otherFiles.map((file) => ({ uri: file.uri, source: file.draftText })),
    ],
    onError: (error) => console.warn("nx language", error),
  });
};

const onMount: OnMount = (editor, monaco) => {
  const model = editor.getModel();
  if (model) {
    setNxMarkers(monaco, model, diagnosticsForThisFile);
  }
};

<Editor language="nx" theme="github-dark" beforeMount={beforeMount} onMount={onMount} value={text} />;
```

## 标记

`toMonacoMarkers(diagnostics)` 转换协议诊断-或任何与 `severity`， `message`， `code` 和一个 `range` 这可能是 `null` - `IMarkerData[]`：严重性映射到 摩纳哥的，以列为基础，零宽度范围扩大了一列，因此插入点 诊断(`expected } here`)保持可见，并且省略了无范围的诊断。 `setNxMarkers(monaco, model, diagnostics, owner = "nx")` 将它们设置在一个模型上。

## 出口

`registerNxLanguage`， `NX_LANGUAGE_ID`， `NX_DEFAULT_LIGHT_THEME`， `NX_DEFAULT_DARK_THEME`， `NX_COMPLETION_TRIGGER_CHARACTERS`， `defaultWorkspace`， `toMonacoLanguageConfiguration`， `nxShikiLanguage`， `toProtocolPosition`， `toMonacoRange`， `toMonacoCompletionKind`， `toMonacoMarkers`， `setNxMarkers`，以及类型 `MonacoNamespace`， `RegisterNxLanguageOptions`， `NxLanguageRegistration`， `NxMonacoTheme`， `MarkerDiagnostic`， `NxLanguageService`.

## 常见问题

### @nx-lang/monaco 是什么？

针对NX的一个Monaco集成：通过Shiki突出显示已发布的语法，在NxLanguageService上悬停和补全，以及从诊断到标记的映射。

### 如何安装 @nx-lang/monaco？

在项目目录运行 npm install @nx-lang/monaco，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：shiki（^4\.0\.0）、monaco-editor（\>=0\.52\.0）、@shikijs/monaco（^4\.0\.0）、@nx-lang/language（\>=0\.1\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @nx-lang/monaco 支持 TypeScript 吗？

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

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

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

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

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

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

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

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

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

