# @cs-au-dk/jelly 中文文档

规范地址：https://npmcn.com/package/%40cs-au-dk/jelly/

版本：0\.13\.0
npm 元数据更新时间：2026-05-11T13:18:23.282Z
中文译文更新时间：2026-11-11T03:04:45.426Z
软件包许可：BSD-3-Clause

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

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

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

- 包体积（解压后）：1.6 MB，258 个文件
- TypeScript 类型：未声明
- Node.js 要求：\>=22\.0\.0
- 运行依赖：13 个
- 首次发布：2023-02-20T13:37:40.345Z
- 最新版本发布：2026-05-11T13:18:23.175Z
- 近 30 天下载量：3530（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：8（近 12 个月 2 个）

## 中文简介

Jelly - 为 JavaScript 调用图表和库使用分析器

## 安装

```sh
npm install @cs-au-dk/jelly
```

也可以使用：`pnpm add @cs-au-dk/jelly`、`yarn add @cs-au-dk/jelly`、`bun add @cs-au-dk/jelly`

## README

# 果冻

[![License](https://img.shields.io/github/license/cs-au-dk/jelly)](https://npmcn.com/package/%40cs-au-dk/jelly/LICENSE) [![npm version](https://img.shields.io/npm/v/@cs-au-dk/jelly)](https://www.npmjs.com/package/@cs-au-dk/jelly)

#### 版权:2023-2026 Anders Møller & Oskar Haarklou Veileborg

Jelly是一个静态分析器 表演

-   _调用图表构建_, (中文(简体) ),
-   _库使用模式匹配_,以及
-   _脆弱性暴露分析_

用于使用节点.js平台的JavaScript(和TypeScript)程序.

分析器设计基于JAM \[1\],TAPIR \[2\]和ACG \[3\] 的构思,支持近似解释 \[4\] 和间接界限\[5\]. 其核心是一流不敏感控制流和点对点分析,以及追踪图书馆使用情况的接入路径. 它模拟了ECMAScript语言和标准库的主要部分(意为不完全健全!), 并(目前)将Node.js标准库视为未知代码.

\[1\] 本杰明·巴斯列夫·尼尔森,马丁·特克拉姆·托普,安德斯·默勒: [用于安全扫描Node.js应用程序的模块调用图构造](https://dl.acm.org/doi/10.1145/3460319.3464836)。 。 。 . ISTA 2021: 29-41号

\[2\] Anders Møller, Benjamin Barslev Nielsen, 马丁·特克拉姆·托尔普: [检测 JavaScript 程序中因中断库更改而受影响的位置](https://dl.acm.org/doi/10.1145/3428255)。 。 。 . Proc. ACM Programm. Lang. 4 (OPSLA): 187:1-187: 25 (2020) (英语)

\[3\] Asger Feldthaus, Max Schäfer, Manu Sridharan, 朱利安·多尔比, 弗兰克·提普: [JavaScript IDE 服务的近似调用图的高效构建](https://ieeexplore.ieee.org/document/6606621/)。 。 。 . Proc. ICSE 2013: 752-761 (英语)

\[4\] 马西亚斯·鲁德·劳尔森(Mathias Rud Laursen), 徐文ny, 安德斯·默勒: [减少静态分析与近似解释不一致](https://dl.acm.org/doi/10.1145/3656424)。 。 。 . Proc. ACM计划. Lang. 8(PLDI):194: 1–194:24 (2024) (英语)

\[5\] 马杜里马·查克拉博蒂,阿卡什·格纳纳库马尔,马努·斯里德哈兰,安德斯·默勒: [间接调用图分析](https://doi.org/10.4230/LIPIcs.ECOOP.2024.10) Proc. ECOOP 2024: 27:1-27:27 (英语)

## 安装

```bash
npm install -g @cs-au-dk/jelly
```

其他备选方案如下: [如何建设](https://npmcn.com/package/%40cs-au-dk/jelly/#readme-how-to-build)。 。 。 .

## 使用量

见全用:

```bash
jelly --help
```

在运行Jelly静态分析器时,会给出一个或多个条目文件作为输入. Directories 被扩展( 使用heuristics 来跳过某些文件和目录, 见 [文件.ts](https://npmcn.com/package/%40cs-au-dk/jelly/src/misc/files.ts)) (中文(简体) ). 从条目文件中可以到达的所有文件都被分析,除了 如果选项 `--ignore-dependencies` ,在这种情况下只分析条目文件, 并仅使用基准目录中的文件(自动检测或使用选项指定) `--basedir` 或者说 `-b`页:1.

例如,生成一个用于 `winston` 软件包及其所有依赖性,包括JSON格式和HTML可视化:

```bash
jelly -j cg.json -m cg.html node_modules/winston
```

查看 `cg.html` 在浏览器中 :

![call graph visualization](https://npmcn.com/package/%40cs-au-dk/jelly/misc/winston-cg.png)

要设置堆积限制, 前缀命令如下:

```bash
NODE_OPTIONS=--max-old-space-size=8192
```

关于Linux `vm.max_map_count` 系统设置还影响到可以使用多少内存。 如果改变 `--max-old-space-size` 在Node.js选项没有帮助, 尝试运行 `sysctl vm.max_map_count` 以查看当前设置。 例如,在64GB RAM的机器上,您可以用 `sudo sysctl -w vm.max_map_count=524288`。 。 。 .

注意分析所有依赖性(即不使用) `--ignore-dependencies`)可以花很长时间. 二. 备选方案 `--max-indirections` 或者说 `--timeout` 可用于提前终止分析,以提供部分(不正确)结果.  
特定软件包也可以使用 `--include-packages` 或者说 `--exclude-packages`。 。 。 .

## 如何建设

安装依赖性 :

```bash
npm install
```

编译类型脚本代码 :

```bash
npm run build
```

编译后,Jelly可以这样运行:

```bash
node lib/main.js
```

构建二进制可执行文件( 可选), 放置在 `dist/`数字 :

```bash
sudo npm install -g pkg
npm run pkg
```

注意 二进制可执行文件不支持动态调用图构建 .

## 夹克

构建 Docker 图像(包括支持动态调用图构建) :

```bash
npm run build-docker
```

在 Docker 中运行 Jelly, 将目录指定为当前工作目录的第一个参数 :

```bash
./bin/jelly-docker . tests/helloworld/app.js --callgraph-html cg.html
```

## 服务器模式

Jelly可以作为命令行界面的替代程序在服务器-模式中运行:

```bash
jelly-server
```

或者说

```bash
node lib/server.js
```

并参见上面关于如何构建二进制可执行文件的说明.

使用 JSON 格式向服务器发送请求 `src/typings/ipc.ts`。 。 。 . 与双行标题(包括空行)同步返回响应

```
Content-Length: <bytes>

```

与 `\r\n` 断线.

## 近似解释

使静态分析能够进行近似解释(见上文参考\[4\]),使用选项 `--approx`数字 :

```bash
jelly --approx tests/helloworld/app.js
```

(此示例假设您通过运行首先安装了测试依赖性) `npm run tests-install`. ) (中文(简体) ) 或者,您可以单独使用选项进行近似解释和静态分析 `--approx-only` 财务报告和审定财务报表 `--approx-load`数字 :

```bash
jelly --approx-only hints.json tests/helloworld/app.js
jelly --approx-load hints.json tests/helloworld/app.js
```

## 间接界限

允许间接界限(见上文参考\[5\]),使用选项 `--max-indirections`数字 :

```bash
jelly --max-indirections 2 tests/helloworld/app.js
```

## 动态调用图构建

Jelly 支持动态调用图形构建通过 [节点Prof](https://github.com/Haiyang-Sun/nodeprof.js/), (中文(简体) ), 它可用于测量静态分析的回想(或不健全).

安装节点Prof( 另见上文关于多克的信息):

```bash
sudo dnf install g++ libstdc++-static
mkdir -p ~/tools; cd ~/tools
git clone --depth 1 --branch 6.0.4 https://github.com/graalvm/mx.git
export PATH=$PATH:$HOME/tools/mx
mx -y fetch-jdk --java-distribution labsjdk-ce-17
export JAVA_HOME=$HOME/.mx/jdks/labsjdk-ce-17-jvmci-22.2-b01
git clone --depth 1 https://github.com/Haiyang-Sun/nodeprof.js.git
cd nodeprof.js
mx sforceimports
mx --dy /compiler build
```

例如,运行 `tests/micro/classes.js` 或者说 `tests/helloworld/app.js` 带有调用图形构造的仪器:

```bash
export GRAAL_HOME=$HOME/tools/graal/sdk/latest_graalvm_home

jelly tests/micro/classes.js -d cg.json
jelly tests/helloworld/app.js -d cg.json
```

JavaScript 程序的附加参数可以在之后添加 `--`。 。 。 .

也可以运行 `npm test` 有仪器的:

```bash
jelly --npm-test tests/mochatest -d cg.json
```

另一种办法是添加 `$JELLY_HOME/lib/bin/node` 改为 `PATH` 设置 `JELLY_OUT`例如,直接运行Mocha:

```bash
cd tests/mochatest
PATH=$JELLY_HOME/bin:$PATH JELLY_OUT=cg.json node_modules/.bin/mocha
```

地点 `JELLY_HOME` 是Jelly的家目录. 这导致文件 `cg.json-<PID>` 用于执行的每个仪器文件.

调用图(以静态或动态方式生成)可以比较精确和召回:

```bash
jelly --compare-callgraphs cg1.json cg2.json
```

## 对于开发者

在监视模式下编译类型脚本代码 :

```bash
npm run build-watch
```

作为脚本安装( I)`jelly` 财务报告和审定财务报表 `jelly-server`促进发展:

```bash
sudo npm link
```

安装测试的依赖性 :

```bash
npm run tests-install
```

运行所有测试 :

```bash
npm test
```

运行单个测试(由regex指定),例如:

```bash
npm test -- -t tests/helloworld
```

为了实现堆栈痕迹的源地图转换,前缀命令通过:

```bash
NODE_OPTIONS=--enable-source-maps
```

## 常见问题

### @cs-au-dk/jelly 是什么？

Jelly - 为 JavaScript 调用图表和库使用分析器

### 如何安装 @cs-au-dk/jelly？

在项目目录运行 npm install @cs-au-dk/jelly，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 jelly、jelly-server，可以用 npx jelly 直接运行。

### @cs-au-dk/jelly 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/cs-au-dk\_\_jelly 是否存在。

### @cs-au-dk/jelly 需要什么版本的 Node\.js？

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

### @cs-au-dk/jelly 可以商用吗？

@cs-au-dk/jelly 使用 BSD-3-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。另外不得用原作者名义为衍生产品背书。以上为概括，不构成法律意见，请以许可原文为准。

### @cs-au-dk/jelly 的下载量有多少？

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

### @cs-au-dk/jelly 还在维护吗？

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

