# @danielsimonjr/sciengjs 中文文档

规范地址：https://npmcn.com/package/%40danielsimonjr/sciengjs/

版本：1\.0\.8
npm 元数据更新时间：2026-11-06T21:05:22.912Z
中文译文更新时间：2026-11-11T10:44:48.355Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：10.1 MB，348 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22
- 运行依赖：6 个
- 首次发布：2026-11-03T02:53:23.465Z
- 最新版本发布：2026-11-06T21:05:22.775Z
- 近 30 天下载量：4846（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：25（近 12 个月 25 个）

## 中文简介

用于科学和工程图、文件和模型的本地渲染引擎

## 安装

```sh
npm install @danielsimonjr/sciengjs
```

也可以使用：`pnpm add @danielsimonjr/sciengjs`、`yarn add @danielsimonjr/sciengjs`、`bun add @danielsimonjr/sciengjs`

## README

# 剪辑

> 用于科学和工程图的本地渲染引擎,以TypeScript为单位.

[![npm](https://img.shields.io/npm/v/@danielsimonjr/sciengjs)](https://www.npmjs.com/package/@danielsimonjr/sciengjs) [![CI](https://github.com/danielsimonjr/sciengjs/actions/workflows/ci.yml/badge.svg)](https://github.com/danielsimonjr/sciengjs/actions/workflows/ci.yml) [![licence: MIT](https://img.shields.io/badge/licence-MIT-blue)](https://npmcn.com/package/%40danielsimonjr/sciengjs/LICENSE)

sciengjs将图源转换成你自己机器上的图像. 它不会向网络服务发送任何来源. 每个渲染器都运行在工人线程中,有时间限制和内存限制,因此不良输入不能被挂起或崩溃呼叫器.

## 这个发布会做什么

0.9.0版本有10种输入类型. 他们是 **图维兹 DOT**, (中文(简体) ), **美人鱼** (每个图表类型)和 **LaTeX 数学** (改为SVG,PNG和PDF). 其中包括: **拼图** (改为SVG、PNG和HTML)和 **HTML 语言** (致巴布亚新几内亚,PDF和Markdown). CAD 文件 **步骤**, (中文(简体) ), **事业单位** 财务报告和审定财务报表 **溴化二苯醚** 转到GLB、HTML中的查看器页面、PNG和DXF。 DXF 绘图选择 `z` 其坐标为毫米。 A 类 **CAD 文档** (JSON中的一个CSG模型)去GLB,STL,HTML和PNG. A 类 **SysML v2 (英语)** 文本子集中的源到 SVG, PNG 和 PDF 。 A 类 **铁兹** 图片通过 Tex 舞台转到 SVG、PNG 和 PDF 。 这个 `tikz` 输入类型包括回路克兹,tikz-cd和chemfig. 第一个渲染下载 TeX 捆绑。 浏览器阶段绘制出类,状态和序列以外的美人鱼类型,并绘制出每个PDF.

| 投入 | 产出 | 发动机 |
| --- | --- | --- |
| 数字 | 特别工作组 | Graphviz 16.1.0, 编入WASM(`@viz-js/viz`(中文(简体) ) |
| 数字 | 巴布亚新几内亚 | Graphviz,然后将resvg编译为WASM(`@resvg/resvg-wasm`,带有捆绑字体 |
| 人鱼(类,状态,序列) | 特别工作组 | 发动机本身的剖面和布局. 类和状态图通过Graphviz. |
| 人鱼(类,状态,序列) | 巴布亚新几内亚 | 相同的SVG,然后resvg编译为WASM(`@resvg/resvg-wasm`,带有捆绑字体 |
| 美人鱼(所有其他类型) | SVG, 巴布亚新几内亚, PDF | 被钉住的美人鱼 11.17.2 在浏览器舞台上建造. 引擎从软件包中为建筑服务. |
| DOT,美人鱼 | 专题报告 | 由浏览器舞台打印的 SVG |
| HTML 语言 | 巴布亚新几内亚,PDF | 浏览器阶段 |
| STEP, IGES, BREP (英语) | GLB, HTML, PNG, DXF | OpenCascade, 编译为 WASM (`occt-import-js`; a 三.js 查看器页面; DXF 大纲通过 `manifold-3d` |
| CAD 文档 | GLB, STL, 3MF, HTML, PNG | 引擎本身的读取器; 固态操作通过 `manifold-3d` (萨摩亚) |
| SysML v2( 文本子集) | SVG, 巴布亚新几内亚, PDF | 引擎自己的解析器和视图, 然后是 Graphviz; PDF 通过浏览器阶段 |
| TikZ 相片、电路克兹、tikz-cd、chemfig、mhchem、公交防线、AMS 数学 | SVG, 巴布亚新几内亚, PDF | 一个自己的WASM的建筑 `tex.web` 与 `etex.ch`; 第一次使用的捆绑下载( e)`SCIENG_TEX_BUNDLE_URL`, (中文(简体) ), `SCIENG_CACHE_DIR`),每个有被绑的sha256;PNG通过resvg;PDF通过浏览器阶段 |

-   **无为网.** DOT和美人鱼路径没有网络请求. 浏览器阶段从 Chrome 或 Chromium 启动 `SCIENG_BROWSER` 带有新的简介。 它的旗帜停止了所有与主机的连接. 客户端拒绝除了页面和被封住的美人鱼建设以外的每一个请求. CI检查了Linux,macOS和Windows上的浏览器进程树.
-   **不安全属性被移除.** 每个引擎都去掉 `image` 财务报告和审定财务报表 `stylesheet` 属性在布局前,并给出每个警告。 DOT 文件不能使引擎或浏览器获取文件或URL. A 类 `URL` 属性作为链接留在 SVG 中.
-   **每台机器上都一样的文字.** PNG文本使用捆绑的解放塞里夫字体,而不是主机的字体. 当绘图要求字体没有的粗体,斜体或字符时,引擎给出了警告.
-   **限制.** 每种渲染都有时间限制,源大小限制和堆积限制. 一个PNG的像素限制为1024 MB.
-   **输入错误 .** 失败的渲染拒绝 `RenderError` 有个密码 引擎永远不会回到另一种格式.
-   **固定运行时间依赖性** 仅限: `@viz-js/viz`, (中文(简体) ), `@resvg/resvg-wasm`, (中文(简体) ), `@mathjax/src`, (中文(简体) ), `parse5`, (中文(简体) ), `occt-import-js` 财务报告和审定财务报表 `manifold-3d`没有本地模块和Python.

每个后发版本都增加了一个输入类型. 这个 [路线图](https://npmcn.com/package/%40danielsimonjr/sciengjs/#readme-roadmap) 列出他们.

## 安装

```sh
npm install @danielsimonjr/sciengjs
```

包裹需要节点22或更后. 该包是一个ES模块.

## 快开始

```js
import { writeFile } from "node:fs/promises";
import { render } from "@danielsimonjr/sciengjs";

const source = `digraph G {
  rankdir=LR;
  sensor -> filter -> controller -> actuator;
  controller -> sensor [label="feedback", style=dashed];
}`;

const svg = await render({ type: "dot", source, format: "svg" });
await writeFile("loop.svg", svg.bytes);

const png = await render({ type: "dot", source, format: "png", options: { scale: 2 } });
await writeFile("loop.png", png.bytes);

console.log(png.mime, png.backend, png.warnings);
// image/png graph/viz+raster/resvg []
```

`render` 返回 a `RenderResult`数字 :

| 外地 | 持有 |
| --- | --- |
| `bytes` | 产出,作为 `Uint8Array` |
| `mime` | 例如媒体类型 `image/svg+xml` |
| `backend` | 例如,生成的后端 `graph/viz` |
| `warnings` | 引擎删除或无法绘制的每样东西都有一个字符串 |

这个 `png` 格式选择一个选项, `scale` (数字大于0,默认为1). 任何其它选项 `E_INPUT`。 。 。 .

## 检查这台机器能产生什么

```js
import { capabilities } from "@danielsimonjr/sciengjs";

for (const pair of await capabilities()) {
  if (pair.ready) console.log(pair.type, "->", pair.format);
}
```

`capabilities` 报告设计中的每个输入和输出对,对接需要的相机,以及此相机是否准备好。 准备对包括 `dot -> svg`, (中文(简体) ), `dot -> png`, (中文(简体) ), `math -> svg` 财务报告和审定财务报表 `math -> png`。只有在配置了浏览器时,需要浏览器阶段的一对才准备就绪.

## 错误

```js
import { render, RenderError } from "@danielsimonjr/sciengjs";

try {
  await render({ type: "dot", source: "digraph { a -> }", format: "svg" });
} catch (err) {
  if (err instanceof RenderError) console.log(err.code, err.message);
}
```

| 代码 | 手段 |
| --- | --- |
| `E_INPUT` | 源或选项无效 |
| `E_UNSUPPORTED` | 此建筑没有对等的后端, 例如 `tikz` 改为 `svg` |
| `E_LIMIT` | 源头、堆积或PNG像素都超过了极限 |
| `E_TIMEOUT` | 变形需要的时间比 `timeoutMs` |
| `E_STAGE_MISSING` | 缺少一个阶段需要的文件,例如捆绑的字体 |
| `E_CONFIG` | 配置值无效 |
| `E_INTEGRITY` | 下载的文件没有它的预期散列 |
| `E_INTERNAL` | 引擎有缺陷 请报告缺陷 |

## 配置

每个渲染以可选配置作为其第二个参数. 环境变量或配置文件也可以设置每个值.

| 密钥 | 环境变量 | 默认 |
| --- | --- | --- |
| `timeoutMs` | `SCIENG_TIMEOUT_MS` | 60 000 个 |
| `maxSourceBytes` | `SCIENG_MAX_SOURCE_BYTES` | 10485760(10个米B) |
| `maxMemoryMb` | `SCIENG_MAX_MEMORY_MB` | 2048 (英语) |
| `rasterFont` | `SCIENG_RASTER_FONT` | 捆绑的解放塞里夫 |
| `assetsUrl` | `SCIENG_ASSETS_URL` | 页:1 `assets/` 软件包的文件夹,该文件夹持有字体和 `index_bg.wasm`A级 `file:` 使用主机的 URL `localhost` 拒绝方式 `E_CONFIG`。 。 。 . |
| `allowNetwork` | `SCIENG_ALLOW_NETWORK` | `tex-bundles` (DOT路径不要求) |
| `maxCadNodes` | `SCIENG_MAX_CAD_NODES` | 1万个 |
| `maxCadFacets` | `SCIENG_MAX_CAD_FACETS` | 2000 000 个 |

`SCIENG_CONFIG` 命名 JSON 配置文件. `loadConfig` 返回已解析的配置.

```js
await render({ type: "dot", source, format: "png" }, { timeoutMs: 10000, maxMemoryMb: 512 });
```

积分限制在节点之下 Bun运行引擎,但Bun不执行工人的堆积限制.

## 阶段子路径

一个只需要一个阶段的呼叫者可以导入该阶段的子路径:

```js
import { dotToSvg } from "@danielsimonjr/sciengjs/graph";
import { svgToPng } from "@danielsimonjr/sciengjs/raster";

const { svg, warnings } = await dotToSvg("digraph { a -> b }");
const png = await svgToPng(svg, { scale: 1, maxMemoryMb: 512 });
```

一个子路径呼叫在呼叫线中运行,没有工人及其极限. 使用 `render` 用于您不信任的输入.

## 美人鱼

这个 `mermaid` 输入绘制类,状态和序列图,不带浏览器. 语法以外的一行拒绝渲染 `E_INPUT`,则信息为行取名。 设定 `lenient` 改为 `true` 跳过这条线,然后得到警告.

其他类人鱼,例如 `flowchart` 财务报告和审定财务报表 `gantt`,需要浏览器舞台。 A 类 `png` 选择 `scale` (上为0,不大于8,默认为1)两道. 浏览器路径大小 `viewBox` 图表。 这个 `svg` 浏览器路径的清晰 `width` 财务报告和审定财务报表 `height`。任何其他 `png` 选项拒绝方式 `E_INPUT`。 。 。 .

```js
import { render } from "@danielsimonjr/sciengjs";

const source = "sequenceDiagram\nAlice->>Bob: Hello Bob\nBob-->>Alice: Hi Alice";
const { bytes, warnings } = await render({ type: "mermaid", source, format: "svg" }, {});
```

其他"美人鱼"图型(如流程图和gantt)会走过浏览器阶段. 他们需要 `SCIENG_BROWSER`没有它,他们就拒绝 `E_STAGE_MISSING`.被钉住的"美人鱼"在包中建造了船,浏览器舞台为它提供页面服务,因此没有请求离开进程.

## 数学

这个 `math` 输入使 LaTeX 数学通过 MathJax 。 输出绘制出每个glyph作为路径,因此不需要字体. 包裹 `ams`, (中文(简体) ), `boldsymbol`, (中文(简体) ), `color` 财务报告和审定财务报表 `mhchem` 已装入。 A 类 `\require` 中包含的包件没有效果。 A 类 `\require` 不同包的拒绝 `E_UNSUPPORTED`。数学字体不包含的字符也拒绝使用 `E_UNSUPPORTED`。信息将字符命名.

A 类 `png` 选择 `scale` (限数高于0,缺省 1). 这个 `svg` 别无选择.

```js
import { render } from "@danielsimonjr/sciengjs";

const svg = await render({ type: "math", source: "\\frac{a}{b}", format: "svg" });
const png = await render({ type: "math", source: "\\ce{H2O + CO2 -> H2CO3}", format: "png", options: { scale: 2 } });
```

## 绘图

这个 `plot` 输入从 JSON 绘制图表。 来源是带有密钥的 JSON 文本 `data` 财务报告和审定财务报表 `layout`。输出格式为 `svg`, (中文(简体) ), `png` 财务报告和审定财务报表 `html`编辑 `svg` 财务报告和审定财务报表 `png` 产出不要求联网.

```js
import { render } from "@danielsimonjr/sciengjs";

const source = JSON.stringify({
  data: [{ type: "scatter", mode: "lines+markers", x: [0, 1, 2], y: [0, 1, 4], name: "y = x^2" }],
  layout: { title: { text: "Square" } },
});
const { bytes } = await render({ type: "plot", source, format: "svg" }, {});
```

引擎读取了Plotly图格式的一个子集. 子集持有 `scatter` 跟踪、页面和网格布局密钥, `line` 财务报告和审定财务报表 `rect` 形状,以及线性或日志轴。 子集拒绝以外的密钥 `E_INPUT` 和关键路径。 设定 `lenient` 改为 `true` 跳过这样的密钥并获得警告。 这个 `html` 输出是一个页,它用被绑定的构件Plotly 4.2.0绘制数字。 页面加载从 CDN 创建,带有分资源完整性散列. 包裹没有发货 整个子集在 [设计](https://npmcn.com/package/%40danielsimonjr/sciengjs/docs/superpowers/specs/2026-11-01-scieng-engine-design.md)(原始内容存档于2018-09-21)., section the POLT.

读者应用这些规则:

-   图有顶级密钥 `data` 财务报告和审定财务报表 `layout` 只有这个.
-   每个字母的第一轴是 `xaxis` 或者说 `yaxis`其他轴是 `xaxis2`, (中文(简体) ), `xaxis3` 上升,没有领先0。 批量接受 `xaxis1` 为一轴. 这个读者拒绝 `xaxis1`,使每个轴都有一个名称.
-   一个轴键必须命名子绘图的轴 `layout.grid`。 。 。 .
-   `tickformat` 实值 `.Nf` 只有N从0到20 N 设置勾选标签的固定小数 .
-   `dtick`, (中文(简体) ), `width` 财务报告和审定财务报表 `height` 必须是高于0.
-   一轴最多有1000个虱子 A 类 `dtick` 给更多的滴答拒绝 `E_INPUT` 和关键路径,例如 `layout.xaxis.dtick`。 。 。 .

一个需要超过20个小数的勾选标签使用缩写形式,例如 `1e-300`。一个对小叮当跨过几十年的日志轴只显示大叮当.

### 控制助手

这个 `./plot` 子道有六助道. 每个助手都使用一个传输功能 `{ num, den }` 与分母和分母的系数,最高功率先行. 每个助手返回 `{ figure, numbers }`编辑 `figure` 是一个阴谋人物。 传过来 `render` 作为JSON文本来绘制它. 这个 `numbers` 持有分析来自同一模型的关键值.

花纹为rad/s. 边际和相相分相为度相. 过度率是%.

`bode` 返回交叉频率和边距 :

```js
import { bode } from "@danielsimonjr/sciengjs/plot";

const { figure, numbers } = bode({ num: [10], den: [1, 1, 0] });
// numbers.gainCrossover is about 3.08, numbers.phaseMargin is about 17.96
```

`step` 返回最后值、上升时间、结算时间、超标时间和高峰时间:

```js
import { step } from "@danielsimonjr/sciengjs/plot";

const { figure, numbers } = step({ num: [1], den: [1, 0.6, 1] });
// numbers.overshoot is about 37.2, numbers.riseTime is about 1.32
```

台阶助推器测量出最高峰和向最终值方向的过射,因此负DC增益给出正确的过射. 在时间网格末端之前无峰值的反应有: `peakTime` 联 合 国 `null` 还有一个 `overshoot` 0. 假想轴上或右侧有柱子的系统没有最终值: `null`. 上升和沉积时间在样品之间插出.

援助者否认真理 `E_INPUT` 当模型的根不趋同时,或者当计算值不是有限度时。 0时的一杆或一0是准确的,没有设定频率范围.

`impulse` 返回峰值及其时间 :

```js
import { impulse } from "@danielsimonjr/sciengjs/plot";

const { figure, numbers } = impulse({ num: [1], den: [1, 1] });
// numbers.peak is 1, numbers.peakTime is 0
```

`nyquist` 返回从曲线到点 -1 最小的距离 :

```js
import { nyquist } from "@danielsimonjr/sciengjs/plot";

const { figure, numbers } = nyquist({ num: [10], den: [1, 1, 0] });
// numbers.minDistanceToMinusOne is about 0.299
```

`poleZero` 返回柱和零:

```js
import { poleZero } from "@danielsimonjr/sciengjs/plot";

const { figure, numbers } = poleZero({ num: [1, 3], den: [1, 2, 5] });
// the poles are -1 + 2j and -1 - 2j, the zero is -3
```

`rootLocus` 返回断开点和每一点的收益:

```js
import { rootLocus } from "@danielsimonjr/sciengjs/plot";

const { figure, numbers } = rootLocus({ num: [1], den: [1, 3, 2] });
// numbers.breakawayPoints[0] is { re: -1.5, k: 0.25 }
```

画个帮手图,交给 `render`数字 :

```js
import { render } from "@danielsimonjr/sciengjs";
import { bode } from "@danielsimonjr/sciengjs/plot";

const { figure } = bode({ num: [10], den: [1, 1, 0] });
const { bytes } = await render({ type: "plot", source: JSON.stringify(figure), format: "html" }, {});
```

## 治疗中心

一个CAD文档是JSON中的一个CSG模型. 引擎将文档读取为数据. 引擎从文档中不运行代码. 节点类型是:

-   原始人类 `cube`, (中文(简体) ), `cylinder`, (中文(简体) ), `sphere` 财务报告和审定财务报表 `polyhedron`· ;
-   2D 配置文件 `rectangle`, (中文(简体) ), `circle` 财务报告和审定财务报表 `polygon`,作为孩子 `extrude` 或者说 `revolve`· ;
-   业务 `union`, (中文(简体) ), `difference` 财务报告和审定财务报表 `intersection`· ;
-   转换 `translate`, (中文(简体) ), `rotate`, (中文(简体) ), `scale` 财务报告和审定财务报表 `mirror`。 。 。 .

每个节点都有一个 `name` (单位:千美元) `color`。 。 。 .

建筑师的功能 `./mesh` 子路径从 TypeScript 程序写入同一文档 :

```js
import { cad } from "@danielsimonjr/sciengjs/mesh";
import { render } from "@danielsimonjr/sciengjs";

const plate = cad.difference([
  cad.cube([40, 20, 4], { color: [0.7, 0.7, 0.7] }),
  cad.translate([10, 10, -1], cad.cylinder(6, 3, { color: [0.2, 0.4, 1] })),
]);
const source = JSON.stringify(cad.cadDocument(plate, { segments: 48 }));
const { bytes } = await render({ type: "cad", source, format: "stl" }, {});
```

-   相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相 切开的一面 `difference` 有剪刀的颜色.
-   STL没有颜色也没有名字. 彩色模型在STL中给出了警告.
-   `format: "3mf"` 给出3MF包,保持颜色和名称。 单位为毫米.
-   `format: "dxf"` 给出 X- Y 平面中的 2D 绘图: 模型的外观,或带有选项 `z` 在那个高地上 每个闭合的轮廓为一闭合多线,以毫米为单位.
-   `format: "pdf"` 给出一页第三角取材于 A4 地貌:正面,上下视图,三维和标题块. 每个视图只显示收音机:一个盲孔,一个口袋或一个步骤在视图的轮廓内是不可见的. 画作没有隐藏行. 选项 `title` (1到80个字符)设置了标题. 长标题得到一个较小的文本高度. 浏览器舞台打印绘图, 因此渲染需要 `SCIENG_BROWSER`。pdf没有颜色.
-   `format: "md"` 报告Markdown的制造设计:大小、体积和地表面积,以及三次检查。 挂起检查给出了需要支持沿 +Z 打印的区域( 选项) `overhang`,默认离垂直45度。 墙壁检查发现墙壁比选项更薄 `minWall` (默认为 0.8 mm) 在每轴上的32个部分。 空档检查发现空档、空档和空档比选项更窄 `minGap` (默认为0.5毫米)在同一节。 检查失败不会拒绝渲染 .
-   超过 `maxCadNodes` 节点拒绝方式 `E_LIMIT` 在实心操作开始之前 一个有超过 `maxCadFacets` 相关方面也以 `E_LIMIT`。 。 。 .
-   一个坏值拒绝 `E_INPUT`。信息给出了 JSON 路径,例如 `model.children[1].radius`。 。 。 .

## 符号ML

这个 `sysml` 输入读取 SysML v2 文本注释的子集。 子集持有 `package`, (中文(简体) ), `part def`, (中文(简体) ), `part`, (中文(简体) ), `attribute`, (中文(简体) ), `port def`, (中文(简体) ), `port`, (中文(简体) ), `connect`, (中文(简体) ), `interface def`, (中文(简体) ), `interface`, (中文(简体) ), `requirement def`, (中文(简体) ), `requirement`, (中文(简体) ), `satisfy`, (中文(简体) ), `:>` 和评论。 这个 [设计](https://npmcn.com/package/%40danielsimonjr/sciengjs/docs/superpowers/specs/2026-11-01-scieng-engine-design.md) 给出准确的语法.

选项 `view` 选择绘图 :

-   `bdd` (缺省):定义、组成和专业;
-   `ibd`: 选项所在部分的部件、端口和连接 `root` 名称;
-   `requirements`:要求和 `satisfy` 关系.

```js
import { render } from "@danielsimonjr/sciengjs";

const source = "part def Car { part wheels : Wheel [4]; } part def Wheel;";
const { bytes } = await render({ type: "sysml", source, format: "svg" }, {});
```

-   子集拒绝外的构造 `E_INPUT`,则信息为行取名.
-   设定 `lenient` 改为 `true` 以未知关键词跳过声明并获得警告.
-   A 类 `png` 选择 `scale`A级 `pdf` 需要浏览器阶段.

## 路线图

这个 [建设计划](https://npmcn.com/package/%40danielsimonjr/sciengjs/docs/superpowers/plans/2026-11-01-scieng-engine-build.md) 给出递增的顺序。 每一次递增都增加了一个输入类型,它的测试和一个放出. 这个 [设计](https://npmcn.com/package/%40danielsimonjr/sciengjs/docs/superpowers/specs/2026-11-01-scieng-engine-design.md) 给每个引擎的API,阶段,安全控制和许可.

| 输入类型 | 阶段 | 状态 |
| --- | --- | --- |
| 数字 | 图表,光栅 | 在0.1.0中发布 |
| 美人鱼 | 图表、美人鱼、浏览器 | 类,状态和顺序:以0.2.0发布;其他类型:以0.3.0发布 |
| LaTeX 数学 | 数学 (MathJax) | svg, png 和 pdf 已经构建; pdf 需要浏览器阶段 |
| TikZ, 电路克兹, LaTeX | tex (自建的WASM 结构) `tex.web`(中文(简体) ) | tikz svg, png 和 pdf 的构建( 未释放); 捆绑来自 `texBundleUrl` |
| 绘图 | 绘图 | svg, png和html:以0.5.0发布;pdf没有计划 |
| SysML v2 (英语) | sysml, 图表 | svg, png and pdf:发布于0.9.0 |
| STEP, IGES, BREP (英语) | 网点( OpenCascade WASM) | glb,html和png:以0.7.0放出;dxf:以1.0.8放出 |
| CAD 文档 | 网点( u)`manifold-3d`(中文(简体) ) | glb,stl,html和png:以0.8.0发布;3mf:以1.0.4发布;dxf:以1.0.5发布;md(设计制造):以1.0.6发布;pdf(第三角画):以1.0.8发布 |
| HTML 转到 PNG、 PDF 和 Markdown | html, 浏览器 | PNG和PDF:以0.3.0发布;Markdown:以0.6.0发布 |

## 代理设备的使用

[`scieng-mcp`](https://github.com/danielsimonjr/scieng-mcp) 给引擎作为MCP工具、斜线命令和技能, 引擎本身对MCP一无所知.

## 发展

安装 Bun 1.4.4 和节点 22 或以后安装 。 然后运行 `bun install --frozen-lockfile`。 。 。 .

| 命令 | 对 |
| --- | --- |
| `bun test` | 运行完整的测试套件 |
| `bun run typecheck` | 类型检查 `src/` 财务报告和审定财务报表 `test/` |
| `bun run build` | 将无害环境管理软件包写入 `dist/` |
| `bun run smoke` | 将构件装入新文件夹并运行在节点下 |

| 路径 | 持有 |
| --- | --- |
| `src/` | 引擎:API、配置、工人、登记和阶段 |
| `test/` | 单位测试、体外测试、节点测试和烟雾测试 |
| `docs/superpowers/` | 设计和建造计划 |
| `docs/architecture/` | 建筑文档,门由 `repo-tools check` |
| `docs/analysis/` | 审判报告和审查 |
| `trials/` | 审判是以后阶段的建设。 包裹不是运来的 |

见 [`CONTRIBUTING.md`](https://npmcn.com/package/%40danielsimonjr/sciengjs/CONTRIBUTING.md)。将安全问题报告为 [`SECURITY.md`](https://npmcn.com/package/%40danielsimonjr/sciengjs/SECURITY.md) 告诉你.

## 许可证

麻省理工学院. 见 [`LICENSE`](https://npmcn.com/package/%40danielsimonjr/sciengjs/LICENSE)。每个被借用的发动机都持有自己的许可证. [`THIRD_PARTY_NOTICES.md`](https://npmcn.com/package/%40danielsimonjr/sciengjs/THIRD_PARTY_NOTICES.md) 列出它们:Graphviz(EPL-2.0)、resvg(MPL-2.0)和Liberation Serif(SIL Open Font License 1.1).

## 常见问题

### @danielsimonjr/sciengjs 是什么？

用于科学和工程图、文件和模型的本地渲染引擎

### 如何安装 @danielsimonjr/sciengjs？

在项目目录运行 npm install @danielsimonjr/sciengjs，或使用 pnpm add / yarn add / bun add。

### @danielsimonjr/sciengjs 支持 TypeScript 吗？

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

### @danielsimonjr/sciengjs 支持 ESM 还是 CommonJS？

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

### @danielsimonjr/sciengjs 需要什么版本的 Node\.js？

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

### @danielsimonjr/sciengjs 可以商用吗？

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

### @danielsimonjr/sciengjs 的下载量有多少？

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

### @danielsimonjr/sciengjs 还在维护吗？

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

