# symbol-tree 中文文档

规范地址：https://npmcn.com/package/symbol-tree/

版本：3\.2\.4
npm 元数据更新时间：2022-06-27T03:05:42.421Z
中文译文更新时间：2026-11-05T15:35:57.900Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/symbol-tree
原文对照：https://npmcn.com/package/symbol-tree/?lang=original
项目主页：https://github.com/jsdom/js-symbol-tree#symbol-tree
源码仓库：https://github.com/jsdom/js-symbol-tree

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

- 包体积（解压后）：57.1 kB，7 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2015-07-14T12:03:12.855Z
- 最新版本发布：2019-06-12T18:10:21.305Z
- 近 30 天下载量：321917778（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：19（近 12 个月 0 个）

## 中文简介

使用符号将任何对象集转换为自己的高效树或链接列表

## 安装

```sh
npm install symbol-tree
```

也可以使用：`pnpm add symbol-tree`、`yarn add symbol-tree`、`bun add symbol-tree`

## README

# 符号树

[![Travis CI Build Status](https://api.travis-ci.org/jsdom/js-symbol-tree.svg?branch=master)](https://travis-ci.org/jsdom/js-symbol-tree) [![Coverage Status](https://coveralls.io/repos/github/jsdom/js-symbol-tree/badge.svg?branch=master)](https://coveralls.io/github/jsdom/js-symbol-tree?branch=master)

将任何对象的集合转换成自己的高效树或链接列表 `Symbol`。 。 。 .

这个库旨在为DOM树提供高效的支撑数据结构. 您也可以使用此库作为高效链接列表 。 任何元数据都直接存储在您的对象上,这保证了任何类型的插入或删除在恒定的时间内进行. 因为一个ES6 `Symbol` ,元数据不会以任何方式干扰对象.

支持Node.js 4+,io.js和现代浏览器.

## 示例

链接列表 :

```javascript
const SymbolTree = require('symbol-tree');
const tree = new SymbolTree();

let a = {foo: 'bar'}; // or `new Whatever()`
let b = {foo: 'baz'};
let c = {foo: 'qux'};

tree.insertBefore(b, a); // insert a before b
tree.insertAfter(b, c); // insert c after b

console.log(tree.nextSibling(a) === b);
console.log(tree.nextSibling(b) === c);
console.log(tree.previousSibling(c) === b);

tree.remove(b);
console.log(tree.nextSibling(a) === c);
```

树:

```javascript
const SymbolTree = require('symbol-tree');
const tree = new SymbolTree();

let parent = {};
let a = {};
let b = {};
let c = {};

tree.prependChild(parent, a); // insert a as the first child
tree.appendChild(parent,c ); // insert c as the last child
tree.insertAfter(a, b); // insert b after a, it now has the same parent as a

console.log(tree.firstChild(parent) === a);
console.log(tree.nextSibling(tree.firstChild(parent)) === b);
console.log(tree.lastChild(parent) === c);

let grandparent = {};
tree.prependChild(grandparent, parent);
console.log(tree.firstChild(tree.firstChild(grandparent)) === a);
```

见 [日记](https://npmcn.com/package/symbol-tree/api.md) 需要更多的文件记录.

## 测试

请先安装依赖性 :

```
npm install
```

您现在可以通过执行 :

```
npm test
```

线路和分行覆盖率应当为100%.

## API 文档

## 符号树

**作者**: 约里斯·范德韦尔 [joris@jorisvanderwel.com (英语)](mailto:joris@jorisvanderwel.com)

-   [符号树](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree)
    -   [符号结构](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree) ⏏
        -   [新符号Tree( \[描述\])](https://npmcn.com/package/symbol-tree/#readme-new_module_symbol-tree--SymbolTree_new)
        -   [初始化(对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+initialize) ⇒ `Object`
        -   [儿童(对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+hasChildren) ⇒ `Boolean`
        -   [第一个孩子(对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+firstChild) ⇒ `Object`
        -   [. last 儿童(对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+lastChild) ⇒ `Object`
        -   [. 先前的兄弟姐妹(对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+previousSibling) ⇒ `Object`
        -   [.next 兄弟姐妹(对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+nextSibling) ⇒ `Object`
        -   [父对象](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+parent) ⇒ `Object`
        -   [.last 包容性演示文稿(对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+lastInclusiveDescendant) ⇒ `Object`
        -   [. preference(对象,\[可选 )](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+preceding) ⇒ `Object`
        -   [。跟踪(对象,\[选项\])](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+following) ⇒ `Object`
        -   [. children To Array( 父, \[选项\])](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+childrenToArray) ⇒ `Array.<Object>`
        -   [.祖先ToArray(对象,\[选项\])](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+ancestorsToArray) ⇒ `Array.<Object>`
        -   [.treetoArray(根,\[可选 )](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+treeToArray) ⇒ `Array.<Object>`
        -   [. 儿童测量器(父母,\[选择\])](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+childrenIterator) ⇒ `Object`
        -   [. 先前的兄弟姐妹标识器(对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+previousSiblingsIterator) ⇒ `Object`
        -   [.next 姊妹星(对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+nextSiblingsIterator) ⇒ `Object`
        -   [. 祖先测量器(对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+ancestorsIterator) ⇒ `Object`
        -   [.treater (根, 选项)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+treeIterator) ⇒ `Object`
        -   [.index(儿童)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+index) ⇒ `Number`
        -   [儿童(家长)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+childrenCount) ⇒ `Number`
        -   [.compareTreePosition(左边,右边)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+compareTreePosition) ⇒ `Number`
        -   [.remove( 移动对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+remove) ⇒ `Object`
        -   [插入前( 参考对象、 新对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+insertBefore) ⇒ `Object`
        -   [后插入( 引用对象, 新对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+insertAfter) ⇒ `Object`
        -   [. 预付儿童(参考对象,新对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+prependChild) ⇒ `Object`
        -   [附录儿童(参考对象,新对象)](https://npmcn.com/package/symbol-tree/#readme-module_symbol-tree--SymbolTree+appendChild) ⇒ `Object`

### 符号

**仁爱**: 导出类别  

#### 新符号Tree( \[描述\])

| 参数 | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| \[说明\] | `string` | `"'SymbolTree data'"` | 符号使用的说明 |

#### 符号 Tree. 初始化(对象) QQ `Object`

您可以使用此功能在对象创建后( 可选择) 初始化 , 利用V8的快质. 如果你愿意的话,同样有用 冻结你的物体.

`O(1)`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)  
**回返**数字 : `Object` - 对象

| 参数 | 类型 |
| --- | --- |
| 对象 | `Object` |

#### 符号 Tree.has 儿童(对象) QQ `Boolean`

回返 `true` 如果物体有子女。 否则它会回来 `false`。 。 。 .

-   `O(1)`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 |
| --- | --- |
| 对象 | `Object` |

#### 符号 Tree. First Child(对象) QQ `Object`

返回给定对象的第一个孩子.

-   `O(1)`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 |
| --- | --- |
| 对象 | `Object` |

#### 符号Tree.Last Child(对象) QQ `Object`

返回给定对象的最后一个孩子.

-   `O(1)`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 |
| --- | --- |
| 对象 | `Object` |

#### 符号Tree. previous Sibling(对象) QQ `Object`

返回给定对象的上一个兄弟姐妹.

-   `O(1)`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 |
| --- | --- |
| 对象 | `Object` |

#### 符号Tree.nextSibling(对象) QQ `Object`

返回给定对象的下个兄弟姐妹.

-   `O(1)`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 |
| --- | --- |
| 对象 | `Object` |

#### 符号 Tree.parent(对象) QQ `Object`

返回给定对象的父对象 .

-   `O(1)`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 |
| --- | --- |
| 对象 | `Object` |

#### 符号Tree.last 包含的 Descendant(对象) QQ `Object`

查找在给定对象树序上最后的包容性后人.

-   `O(n)` (最坏的情况) `n` 是树的深处 `object`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 |
| --- | --- |
| 对象 | `Object` |

#### 符号Tree.preplease(对象,\[可选 ) QQ `Object`

查找给定对象(B)的上一个对象(A). 如果A和B在同一棵树上,则物体A在物体B之前 a依树序在B之前出现.

-   `O(n)` (最坏情况)
-   `O(1)` (走整个树时被摊销)

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| 对象 | `Object` |  |
| \[可选 | `Object` |  |
| \[选项.root\] | `Object` | 如果设定, `root` 必须是返回值(或返回无效)的包容性祖先。 这个支票 _假设_ 那个 `root` 也是给定的包容性祖先 `object` |

#### 符号Tree. following(对象,\[可选 ) QQ `Object`

查找给定对象(B)的以下对象(A). 如果天体A和B在同一棵树上,则天体A跟随天体B a依树序排列在B后面.

-   `O(n)` (最坏的情况) `n` 是整个树上的对象数量
-   `O(1)` (走整个树时被摊销)

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| 对象 | `Object` |  |  |
| \[可选 | `Object` |  |  |
| \[选项.root\] | `Object` |  | 如果设定, `root` 必须是返回值(或返回无效)的包容性祖先。 这个支票 _假设_ 那个 `root` 也是给定的包容性祖先 `object` |
| \[选项.skip儿童\] | `Boolean` | `false` | 如果设定, 请忽略 `object` |

#### 符号 Tree. children to Array(父, \[选项\]) QQ `Array.<Object>`

将给定对象的所有子程序添加到数组中.

-   `O(n)` 地点 `n` 是给定孩子的数量 `parent`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| 父目录 | `Object` |  |  |
| \[可选 | `Object` |  |  |
| \[选项.阵 | `Array.<Object>` | `[]` |  |
| \[选项.filter\] | `function` |  | 在每个对象添加到数组之前测试其功能 。 以参数(对象)引出. 应返回 `true` 如果将一个对象包括在内. |
| \[选项。 这个 阿尔格 | `*` |  | 要使用的数值 `this` 执行时 `filter`。 。 。 . |

#### 符号Tree.asters ToArray(对象,\[可选 ) QQ `Array.<Object>`

将给定对象的所有包容性祖先添加到数组中.

-   `O(n)` 地点 `n` 是给定的祖先的数量 `object`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| 对象 | `Object` |  |  |
| \[可选 | `Object` |  |  |
| \[选项.阵 | `Array.<Object>` | `[]` |  |
| \[选项.filter\] | `function` |  | 在每个对象添加到数组之前测试其功能 。 以参数(对象)引出. 应返回 `true` 如果将一个对象包括在内. |
| \[选项。 这个 阿尔格 | `*` |  | 要使用的数值 `this` 执行时 `filter`。 。 。 . |

#### 符号Tree.treetoArray(根,\[可选 ) QQ `Array.<Object>`

将给定对象的所有后裔添加到数组中(按树序排列).

-   `O(n)` 地点 `n` 是给定子树上的对象数量 `object`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| 根号 | `Object` |  |  |
| \[可选 | `Object` |  |  |
| \[选项.阵 | `Array.<Object>` | `[]` |  |
| \[选项.filter\] | `function` |  | 在每个对象添加到数组之前测试其功能 。 以参数(对象)引出. 应返回 `true` 如果将一个对象包括在内. |
| \[选项。 这个 阿尔格 | `*` |  | 要使用的数值 `this` 执行时 `filter`。 。 。 . |

#### 符号Tree.ChildrenIterator(父母,\[可选 ) QQ `Object`

以给定对象的所有儿童标注

-   `O(1)` 单次重复

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)  
**回返**数字 : `Object` - 一个可移动的延后器(ES6)

| 参数 | 类型 | 默认 |
| --- | --- | --- |
| 父目录 | `Object` |  |
| \[可选 | `Object` |  |
| \[可选.反 | `Boolean` | `false` |

#### 符号Tree. previous SiblingsIterator(对象) QQ `Object`

分布于给定对象的所有先前的兄弟姐妹. (倒数树序)

-   `O(1)` 单次重复

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)  
**回返**数字 : `Object` - 一个可移动的延后器(ES6)

| 参数 | 类型 |
| --- | --- |
| 对象 | `Object` |

#### 符号Tree.next 姊妹关系编辑器(对象) QQ `Object`

覆盖给定对象的后继兄弟姐妹。 (按树序排列)

-   `O(1)` 单次重复

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)  
**回返**数字 : `Object` - 一个可移动的延后器(ES6)

| 参数 | 类型 |
| --- | --- |
| 对象 | `Object` |

#### 符号Tree.astersIterator(对象) QQ `Object`

覆盖特定对象的所有包容性祖先

-   `O(1)` 单次重复

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)  
**回返**数字 : `Object` - 一个可移动的延后器(ES6)

| 参数 | 类型 |
| --- | --- |
| 对象 | `Object` |

#### 符号 Tree.treeIterator( 根, 选项) QQ `Object`

以树序排列在给定对象的所有后人上.

何处 `n` 是给定子树上的对象数量 `root`数字 :

-   `O(n)` (单次重复最坏的情况)
-   `O(n)` (摊销,完成执行器时)

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)  
**回返**数字 : `Object` - 一个可移动的延后器(ES6)

| 参数 | 类型 | 默认 |
| --- | --- | --- |
| 根号 | `Object` |  |
| 选项 | `Object` |  |
| \[可选.反 | `Boolean` | `false` |

#### 符号Tree.index(孩子) `Number`

查找给定对象的索引( 先前的兄弟姐妹数) .

-   `O(n)` 地点 `n` 是前兄弟姐妹的数量
-   `O(1)` (被摊销,如果树没有被修改)

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)  
**回返**数字 : `Number` - 前兄弟姐妹的人数,或者如果物体没有父母,则为-1

| 参数 | 类型 |
| --- | --- |
| 儿童 | `Object` |

#### 符号 Tree. Count( 父母) QQ `Number`

计算孩子的数量.

-   `O(n)` 地点 `n` 儿童数量
-   `O(1)` (被摊销,如果树没有被修改)

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 |
| --- | --- |
| 父目录 | `Object` |

#### 符号Tree.compareTreePosition(左,右) QQ `Number`

比较一个对象相对于另一个对象的位置。 返回一个位集 :

-   失踪人数:1人
-   预告: 2
-   后续行动:4
-   内装: 8
-   来文日期: 16

语义与比较 DOM 中的DocumentPosition 相同,但 断绝与其它任何一点.

地点 `n` 财务报告和审定财务报表 `m` 其祖先数量 `left` 财务报告和审定财务报表 `right`· ; 地点 `o` 是指具有下列特征的儿童人数: `left` 财务报告和审定财务报表 `right`数字 :

-   `O(n + m + o)` (最坏情况)
-   `O(n + m)` (被摊销,如果树没有被修改)

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)

| 参数 | 类型 |
| --- | --- |
| 左边 | `Object` |
| 对 | `Object` |

#### 符号Tree.remove(删除对象) QQ `Object`

从此树上移除对象 . 如果已经删除, 无效 .

-   `O(1)`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)  
**回返**数字 : `Object` - 删除对象

| 参数 | 类型 |
| --- | --- |
| 删除对象 | `Object` |

#### 符号Tree. 插入前( 引用对象, 新对象) QQ `Object`

在引用对象之前插入给定对象. `newObject` 现在是前一个兄弟 `referenceObject`。 。 。 .

-   `O(1)`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)  
**回返**数字 : `Object` - 新对象  
**掷出**数字 :

-   `Error` 如果新对象已在此符号特雷中存在

| 参数 | 类型 |
| --- | --- |
| 引用对象 | `Object` |
| 新对象 | `Object` |

#### 符号 Tree. 插入后( 引用对象, 新对象) QQ `Object`

在引用对象后插入给定对象. `newObject` 现在是下一个兄弟 `referenceObject`。 。 。 .

-   `O(1)`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)  
**回返**数字 : `Object` - 新对象  
**掷出**数字 :

-   `Error` 如果新对象已在此符号特雷中存在

| 参数 | 类型 |
| --- | --- |
| 引用对象 | `Object` |
| 新对象 | `Object` |

#### 符号 Tree. prepend Child( 引用对象, 新对象) QQ `Object`

将给定对象作为给定参考对象的第一个孩子插入. `newObject` 现在,是第一个孩子 `referenceObject`。 。 。 .

-   `O(1)`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)  
**回返**数字 : `Object` - 新对象  
**掷出**数字 :

-   `Error` 如果新对象已在此符号特雷中存在

| 参数 | 类型 |
| --- | --- |
| 引用对象 | `Object` |
| 新对象 | `Object` |

#### 符号Tree.append Child(参考对象,新对象) QQ `Object`

将给定对象作为给定参考对象的最后一个孩子插入. `newObject` 现在,是最后一个孩子 `referenceObject`。 。 。 .

-   `O(1)`

**仁爱**: 实例方法 [`SymbolTree`](https://npmcn.com/package/symbol-tree/#readme-exp_module_symbol-tree--SymbolTree)  
**回返**数字 : `Object` - 新对象  
**掷出**数字 :

-   `Error` 如果新对象已在此符号特雷中存在

| 参数 | 类型 |
| --- | --- |
| 引用对象 | `Object` |
| 新对象 | `Object` |

## 常见问题

### symbol-tree 是什么？

使用符号将任何对象集转换为自己的高效树或链接列表

### 如何安装 symbol-tree？

在项目目录运行 npm install symbol-tree，或使用 pnpm add / yarn add / bun add。

### symbol-tree 支持 TypeScript 吗？

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

### symbol-tree 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### symbol-tree 可以商用吗？

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

### symbol-tree 的下载量有多少？

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

### symbol-tree 还在维护吗？

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

