# @externs/nodejs 中文文档

规范地址：https://npmcn.com/package/%40externs/nodejs/

版本：1\.5\.0
npm 元数据更新时间：2022-04-05T09:26:25.939Z
中文译文更新时间：2026-11-14T06:01:00.511Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：401 kB，50 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2019-11-16T07:38:21.004Z
- 最新版本发布：2019-11-16T07:38:21.387Z
- 近 30 天下载量：4565（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 0 个）

## 中文简介

(原始内容存档于2018-10-21). The Close Compiler Externs for Node.JS.

## 安装

```sh
npm install @externs/nodejs
```

也可以使用：`pnpm add @externs/nodejs`、`yarn add @externs/nodejs`、`bun add @externs/nodejs`

## README

# @ externs/ nodejs (英语)

[![npm version](https://badge.fury.io/js/%40externs%2Fnodejs.svg)](https://www.npmjs.com/package/@externs/nodejs)

`@externs/nodejs` 是 Google 关闭编译器 Externs for Node.JS.

```sh
yarn add -E @externs/nodejs
```

## 目录

-   [目录](https://npmcn.com/package/%40externs/nodejs/#readme-table-of-contents)
-   [方法](https://npmcn.com/package/%40externs/nodejs/#readme-method)
-   [API 密码](https://npmcn.com/package/%40externs/nodejs/#readme-api)
    -   [`getExternsDir(): string`](https://npmcn.com/package/%40externs/nodejs/#readme-getexternsdir-string)
-   [如何使用](https://npmcn.com/package/%40externs/nodejs/#readme-how-to-use)
    -   [冲突](https://npmcn.com/package/%40externs/nodejs/#readme-clashes)
-   [警告和待办事宜](https://npmcn.com/package/%40externs/nodejs/#readme-warnings-and-todos)
    -   [导出=内部](https://npmcn.com/package/%40externs/nodejs/#readme-export--internal)
    -   [全球](https://npmcn.com/package/%40externs/nodejs/#readme-global)
    -   [节点JS](https://npmcn.com/package/%40externs/nodejs/#readme-nodejs)
    -   [活动](https://npmcn.com/package/%40externs/nodejs/#readme-events)
    -   [流线](https://npmcn.com/package/%40externs/nodejs/#readme-stream)
    -   [显示](https://npmcn.com/package/%40externs/nodejs/#readme-assert)
        -   [类型中缺少的方法](https://npmcn.com/package/%40externs/nodejs/#readme-missing-methods-in-types)
    -   [页:1](https://npmcn.com/package/%40externs/nodejs/#readme-v8)
        -   [类型中缺少的方法](https://npmcn.com/package/%40externs/nodejs/#readme-missing-methods-in-types)
    -   [组](https://npmcn.com/package/%40externs/nodejs/#readme-cluster)
        -   [类型中缺少的方法](https://npmcn.com/package/%40externs/nodejs/#readme-missing-methods-in-types)
    -   [密码](https://npmcn.com/package/%40externs/nodejs/#readme-crypto)
        -   [类型中缺少的方法](https://npmcn.com/package/%40externs/nodejs/#readme-missing-methods-in-types)
    -   [单位](https://npmcn.com/package/%40externs/nodejs/#readme-dns)
    -   [Fs 数](https://npmcn.com/package/%40externs/nodejs/#readme-fs)
    -   [调值](https://npmcn.com/package/%40externs/nodejs/#readme-tls)
    -   [小时](https://npmcn.com/package/%40externs/nodejs/#readme-http)
    -   [小时](https://npmcn.com/package/%40externs/nodejs/#readme-https)
    -   [Http2 数据](https://npmcn.com/package/%40externs/nodejs/#readme-http2)
    -   [兹利布](https://npmcn.com/package/%40externs/nodejs/#readme-zlib)
    -   [子进程( P)](https://npmcn.com/package/%40externs/nodejs/#readme-child_process)
    -   [UTI 语录](https://npmcn.com/package/%40externs/nodejs/#readme-util)
    -   [纯码](https://npmcn.com/package/%40externs/nodejs/#readme-punycode)
    -   [读行](https://npmcn.com/package/%40externs/nodejs/#readme-readline)
    -   [调用](https://npmcn.com/package/%40externs/nodejs/#readme-repl)
    -   [用户](https://npmcn.com/package/%40externs/nodejs/#readme-util)
    -   [查询字符串](https://npmcn.com/package/%40externs/nodejs/#readme-querystring)
    -   [净额](https://npmcn.com/package/%40externs/nodejs/#readme-net)
-   [妇女](https://npmcn.com/package/%40externs/nodejs/#readme-wip)
-   [版权](https://npmcn.com/package/%40externs/nodejs/#readme-copyright)

[![](https://npmcn.com/.documentary/section-breaks/0.svg?sanitize=true)](https://npmcn.com/package/%40externs/nodejs/#readme-table-of-contents)

## 方法

该方法是使用 [`tsickle`](https://github.com/angular/tsickle) 关于节点JS的类型定义文件(`@types/node/index.d.ts`) (中文(简体) ). 然而,为准备外观,采取了一些步骤:

1.  定义被分割为单个文件,从而更容易跟踪警告,并维持每个外部文件必须进行的手动修改.
2.  当试图生成从 [单个文件](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/node/v8/index.d.ts#L193)之间有冲突 `declare var Buffer` 财务报告和审定财务报表 `interface Buffer`,哪个 _类型脚本_ 不错,但是 `tsickle` 无法正确处理 。 为了克服这个 _节点缓冲_ 界面只是被移动到一个单独的文件中,生成其外部文本,然后手动更新以包含来自 _var 缓冲_。也可以通过宣布 _缓冲_ 作为一门使用静态方法的课, 但我们手动做了.
    
    ```ts
    // original node.d.ts
    // Declaring both var and interface DOES NOT WORK WITH TSICKLE
    interface Buffer extends NodeBuffer { }
    declare var Buffer: { }
    // later on ...
    interface NodeBuffer extends Uint8Array { }
    ```
    
3.  已经增加了测试 `Buffer` 界面,以确保工作时没有警告 _缓冲_ API (英语). 这些测试只是说明如何测试外壳,即确保外壳 _海合会_ 不产生任何警告. 显示 _缓冲_ 测试(`depack test/spec/buffer.js -a --checks_only --externs v8/global/buffer.js --externs v8/global.js` 显示没有警告.
    
    ```js
    const ab = new ArrayBuffer(16)
    const data = ['hello', 'world']
    const string = 'hello world'
    
    /** @type {!Buffer} */
    var b
    b = new Buffer(string)
    b = new Buffer(string, 'utf8')
    b = new Buffer(100)
    b = new Buffer(new Uint8Array(100))
    b = new Buffer(ab)
    b = new Buffer(data)
    b = new Buffer(b)
    
    b = Buffer.from(ab)
    b = Buffer.from(ab, 10)
    b = Buffer.from(ab, 10, 20)
    
    b = Buffer.from(data)
    b = Buffer.from(string)
    b = Buffer.from(b)
    b = Buffer.from(ab)
    
    b = Buffer.from(string, 'utf8')
    
    /** @type {boolean} */
    var ib = Buffer.isBuffer(string)
    ib = Buffer.isBuffer(b)
    
    /** @type {boolean} */
    var ie = Buffer.isEncoding('utf8')
    ie = Buffer.isEncoding('sirocco5')
    
    /** @type {number} */
    var bl = Buffer.byteLength(string)
    bl = Buffer.byteLength(b)
    bl = Buffer.byteLength(new DataView(ab))
    bl = Buffer.byteLength(ab)
    bl = Buffer.byteLength(string, 'utf8')
    
    b = Buffer.concat([b, b])
    b = Buffer.concat([b, b], 10)
    
    /** @type {number} */
    var n = Buffer.compare(b, b)
    
    b = Buffer.alloc(10)
    b = Buffer.alloc(10, string)
    b = Buffer.alloc(10, b)
    b = Buffer.alloc(10, 10)
    b = Buffer.alloc(10, string, 'utf8')
    
    b = Buffer.allocUnsafe(10)
    
    b = Buffer.allocUnsafeSlow(10)
    
    /** @type {number} */
    var ps = Buffer.poolSize
    ```
    
4.  因为 [警告](https://npmcn.com/package/%40externs/nodejs/#readme-warnings-and-todos) 案件数量 `tsickle` 无法处理,一些外出人员需要手动更新,通过查看出错消息以及人工检查生成的代码.
5.  全球仅被定义为: `global` 对象在 **`global.d.ts`**数字 : `declare var global: NodeJS.Global;`. 这些不会在全球范围传播。 目前,我们不确定.. [`NodeJS.Global`](https://npmcn.com/types-v8/nodejs.js#429) 其他 _缓冲_ 应扩大至全球范围,因为 _结束_ 因为他们是普通的联署机构. 显示全局
    
    ```ts
    export interface Global {
        Array: typeof Array;
        ArrayBuffer: typeof ArrayBuffer;
        Boolean: typeof Boolean;
        Buffer: typeof Buffer;
        DataView: typeof DataView;
        Date: typeof Date;
        Error: typeof Error;
        EvalError: typeof EvalError;
        Float32Array: typeof Float32Array;
        Float64Array: typeof Float64Array;
        Function: typeof Function;
        GLOBAL: Global;
        Infinity: typeof Infinity;
        Int16Array: typeof Int16Array;
        Int32Array: typeof Int32Array;
        Int8Array: typeof Int8Array;
        Intl: typeof Intl;
        JSON: typeof JSON;
        Map: MapConstructor;
        Math: typeof Math;
        NaN: typeof NaN;
        Number: typeof Number;
        Object: typeof Object;
        Promise: Function;
        RangeError: typeof RangeError;
        ReferenceError: typeof ReferenceError;
        RegExp: typeof RegExp;
        Set: SetConstructor;
        String: typeof String;
        Symbol: Function;
        SyntaxError: typeof SyntaxError;
        TypeError: typeof TypeError;
        URIError: typeof URIError;
        Uint16Array: typeof Uint16Array;
        Uint32Array: typeof Uint32Array;
        Uint8Array: typeof Uint8Array;
        Uint8ClampedArray: Function;
        WeakMap: WeakMapConstructor;
        WeakSet: WeakSetConstructor;
        // clearImmediate is part of global extern
        clearImmediate: (immediateId: any) => void;
        // clearInterval is skipped by tsickle
        clearInterval: (intervalId: NodeJS.Timer) => void;
        // clearTimeout is skipped by tsickle
        clearTimeout: (timeoutId: NodeJS.Timer) => void;
        // console is part of global extern
        console: typeof console;
        decodeURI: typeof decodeURI;
        decodeURIComponent: typeof decodeURIComponent;
        encodeURI: typeof encodeURI;
        encodeURIComponent: typeof encodeURIComponent;
        escape: (str: string) => string;
        eval: typeof eval;
        // global is part of global extern
        global: Global;
        isFinite: typeof isFinite;
        isNaN: typeof isNaN;
        parseFloat: typeof parseFloat;
        parseInt: typeof parseInt;
        // process is part of global extern
        process: Process;
        // root is NOT part of global extern: SHOULD IT BE?
        root: Global;
        // setImmediate is part of global extern
        setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => any;
        // setInterval is skipped by tsickle
        setInterval: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => NodeJS.Timer;
        // setTimeout is skipped by tsickle
        setTimeout: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => NodeJS.Timer;
        undefined: typeof undefined;
        unescape: (str: string) => string;
        gc: () => void;
        v8debug?: any;
    }
    ```
    

将声明分入单独文件的问题是,将上游更新合并到其中比较困难,需要做大量人工工作. 因此,理想的情况是,必须设置补丁脚本,以便更新生成的类型,然而,在目前,外部脚本是手动更新的 [警告](https://npmcn.com/package/%40externs/nodejs/#readme-warnings-and-todos)。 。 。 .

[![](https://npmcn.com/.documentary/section-breaks/1.svg?sanitize=true)](https://npmcn.com/package/%40externs/nodejs/#readme-table-of-contents)

## API 密码

```js
import getExternsDir, { dependencies } from '@externs/nodejs'
```

每个单元的外观见于已出版的 `v8` 目录。 这个 `global` 财务报告和审定财务报表 `nodejs` 外部编辑时总是需要在场 _节点JS_ 方案(除非是纯粹的联署材料)。 Externs可能依赖于其他外延,依赖树由此包导出:

```js
/* alanode example/ */
import getExternsDir, { dependencies } from '../src'

console.log('Externs dir: %s', getExternsDir())
console.log('Dependencies:')
console.log(dependencies)
```

```js
Externs dir: v8
Dependencies:
{ url: [ 'querystring' ],
  stream: [ 'events' ],
  net: [ 'stream', 'events', 'dns' ],
  fs: [ 'stream', 'events', 'url' ],
  tls: [ 'crypto', 'dns', 'net', 'stream' ],
  http: [ 'events', 'net', 'stream', 'url' ],
  https: [ 'tls', 'events', 'http', 'url' ],
  http2: [ 'events', 'fs', 'net', 'stream', 'tls', 'http', 'url' ],
  zlib: [ 'stream' ],
  child_process: [ 'events', 'stream', 'net' ],
  cluster: [ 'child_process', 'events', 'net' ],
  readline: [ 'events', 'stream' ],
  repl: [ 'stream', 'readline' ],
  dgram: [ 'events', 'dns' ],
  string_decoder: [ 'buffer' ],
  domain: [ 'events' ],
  tty: [ 'net' ] }
```

[![](https://npmcn.com/.documentary/section-breaks/2.svg?sanitize=true)](https://npmcn.com/package/%40externs/nodejs/#readme-table-of-contents)

### `getExternsDir(): _string_`

运行 `require.resolve('@externs/nodejs/package.json')` 并添加 `v8` ,在结尾指向externs版本8(目前只支持节点8).

[![](https://npmcn.com/.documentary/section-breaks/3.svg?sanitize=true)](https://npmcn.com/package/%40externs/nodejs/#readme-table-of-contents)

## 如何使用

这些外接器是用来供 _拆装_:网络和后端节点的依赖捆绑器. JS. _拆装_ 将在模块上进行基于regex的静态分析,当它们导入一个内部模块(例如, `path`),它将按需要添加的方式标出外形。 然后,它会添加 `require` 调用输出包 :

```js
import { join } from 'path'

// will produce the wrapper
const path = require('path')
```

如何汇编的重要内容 _节点JS_ 软件包在 _拆装_,是将一个伪内置模块放置在 `node_modules`。例如,对于 `path` 内部,将生成以下代码: `node_modules/path/index.js`数字 :

```js
export default path
export const {
  basename,
  delimiter,
  dirname,
  extname,
  format,
  isAbsolute,
  join,
  normalize,
  parse,
  posix,
  relative,
  resolve,
  sep,
  win32,
} = path
```

因为 `path` 以前在输出包件中定义过,并添加了外接器,其所有属性都会被解结构并正确导出.

[![](https://npmcn.com/.documentary/section-breaks/4.svg?sanitize=true)](https://npmcn.com/package/%40externs/nodejs/#readme-table-of-contents)

### 冲突

> 这可能需要重新思考...

有3个模块与一些全局变量名称相同: `module` 财务报告和审定财务报表 `console` 财务报告和审定财务报表 `buffer`编辑 `crypto` 外观 [已经存在](https://github.com/google/closure-compiler/blob/master/externs/browser/w3c_webcrypto.js#L552) 输入 _海合会_因此, _拆装_ 要求它们使用下划线:

```js
// module !== require('module') so this is good
const _module = require('module')
// console === require('console') so we might change that later
const _console = require('console')
// buffer === require('buffer') so we might change that later
const _buffer = require('buffer')
const _crypto = require('crypto')
```

[![](https://npmcn.com/.documentary/section-breaks/5.svg?sanitize=true)](https://npmcn.com/package/%40externs/nodejs/#readme-table-of-contents)

## 警告和待办事宜

在每个外部建筑的形成过程中,都有警告。 这些警告需要人工纠正。 还有 `TODO` 生成的语句 `tsickle` 无法进行一些分析。 它们还需要(而且仍然需要)人工修复.

`tsickle` 无法处理 :

-   _`PropertySignature`_数字 :
    
    ```ts
    export interface IncomingHttpHeaders { 'accept'?: string; }
    ```
    
-   _`IncludesNonWideningType`_数字 :
    
    ```ts
    export type ServerOptions = tls.SecureContextOptions & tls.TlsOptions;
    ```
    
-   _`omitting interface deriving from class`_ (并不总是):
    
    ```ts
    export interface ReadableStream extends EventEmitter { }
    ```
    
-   _`omitting heritage reference to a type/value`_ (不太确定吗? )
    
    ```ts
    export interface ErrnoException extends Error { }
    ```
    

> _删除来自类的接口_ 由于某种原因,班级并不总是能够延长另一个班级. 例如 `@extends {event.EventEmitter}` 在许多依赖它的文件中必须手动添加.

[![](https://npmcn.com/.documentary/section-breaks/6.svg?sanitize=true)](https://npmcn.com/package/%40externs/nodejs/#readme-table-of-contents)

### 导出=内部

`Events` 财务报告和审定财务报表 `Stream` 具有一个类型结构,用于导出一个 `internal` 属性 :

```ts
declare module "events" {
  class internal extends NodeJS.EventEmitter { }

  namespace internal {
    export class EventEmitter extends internal {
      static listenerCount(emitter: EventEmitter, event: string | symbol): number;
      ...
    }
  }

  export = internal;
}
```

这将导致外部有 `internal` 属性 :

```js
/**
 * @param {(string|symbol)} type
 * @return {number}
 */
events.internal.EventEmitter.prototype.listenerCount = function(type) {};
```

这显然不正确,所以 `.internal` 需要手动删除.

[![](https://npmcn.com/.documentary/section-breaks/7.svg?sanitize=true)](https://npmcn.com/package/%40externs/nodejs/#readme-table-of-contents)

### 全球

```js
// interface NodeBuffer extends Uint8Array {
types-v8/global.d.ts(188,1): warning TS0: omitting heritage reference to a type/value conflict: Uint8Array
```

-   [x] [添加](https://npmcn.com/package/%40externs/nodejs/v8/global/buffer.js#6) `@ extends {Uint8Array}` 改为 _缓冲_。 。 。 .
-   [x] 更新 `NodeRequire` 可调用,添加 [测试](https://npmcn.com/package/%40externs/nodejs/test/spec/require.js)数字 :
    
    | 在此之前 | 之后 |
    | --- | --- |
    | 
    ```ts
    /**
    * @record
    * @struct
    */
    function NodeRequireFunction() {}
    
    /* TODO: CallSignature:  */
    /**
    * @extends {NodeRequireFunction}
    * @record
    * @struct
    */
    function NodeRequire() {}
    /** @type {!RequireResolve} */
    NodeRequire.prototype.resolve;
    /**
    * @record
    * @struct
    */
    function RequireResolve() {}
    ```
    
     | 
    
    ```ts
    /**
     * @param {string} id
     * @returns {?}
     */
    function NodeRequireFunction(id) {}
    
    /* TODO: CallSignature:  */
    /**
    * @param {string} id
    * @returns {*}
    */
    function NodeRequire(id) {}
    /** @type {!RequireResolve} */
    NodeRequire.prototype.resolve;
    /**
    * @param {string} request
    * @param {{paths:!Array<string>}} options
    * @return {string}
    */
    function RequireResolve(request, options) {}
    ```
    
     |
    
-   [x] 这个 [`NodeModule.prototype.require`](https://npmcn.com/package/%40externs/nodejs/v8/global.js) 不应提及 _节点要求_ 改为 _节点需要函数_ 因为 _节点要求_ 仅仅是一个没有额外属性的函数,例如 `.cache` _类_然而, _节点需要函数_ 仍然需要更改为从 `@struct`。 。 。 .

### 节点JS

节点JS是一个包含其他类引用的API的界面. 虽然没有NodeJSextern这样的东西,但其属性在其他extern上被引用. 因为它也被引用于 `global.d.ts`,它将永远由 _拆装_ 编辑时 _节点JS_ 程序.

```js
types-v8/nodejs.d.ts(98,3): warning TS0: omitting heritage reference to a type/value conflict: Error
types-v8/nodejs.d.ts(123,3): warning TS0: omitting interface deriving from class: EventEmitter
types-v8/nodejs.d.ts(137,3): warning TS0: omitting interface deriving from class: EventEmitter
types-v8/nodejs.d.ts(149,3): warning TS0: omitting interface deriving from class: EventEmitter
types-v8/nodejs.d.ts(255,3): warning TS0: omitting interface deriving from class: EventEmitter
types-v8/nodejs.d.ts(270,7): warning TS0: should not emit a 'never' type
types-v8/nodejs.d.ts(446,7): warning TS0: anonymous type has no symbol
```

-   [x] [添加](https://npmcn.com/package/%40externs/nodejs/v8/nodejs.js#128) `@extends {Error}` 改为 _错误例外_
-   [x] [添加](https://npmcn.com/package/%40externs/nodejs/v8/nodejs.js#248) `@extends {NodeJS.EventEmitter}` 改为 _可读结构_
-   [x] [添加](https://npmcn.com/package/%40externs/nodejs/v8/nodejs.js#319) `@extends {NodeJS.EventEmitter}` 改为 _可写入结构_
-   [x] [添加](https://npmcn.com/package/%40externs/nodejs/v8/nodejs.js#350) `@extends {NodeJS.EventEmitter}` 改为 _活动_
-   [x] [添加](https://npmcn.com/package/%40externs/nodejs/v8/nodejs.js#652) `@extends {NodeJS.EventEmitter}` 改为 _进程_
-   [ ] [添加](https://npmcn.com/package/%40externs/nodejs/v8/nodejs.js#953) `Intl` 类型为 _节点JS. Global.prototype. 中国植物物种信息数据库. 输入;_
-   [x] [删除](https://npmcn.com/package/%40externs/nodejs/v8/nodejs.js#546) `@struct` 从 _进程Env_ 防止警告
    
    ```js
    test/code.js:7: WARNING - Cannot do '[]' access on a struct
    const output = process.env['OUTPUT']
    ```
    
-   [x] [添加](https://npmcn.com/package/%40externs/nodejs/v8/nodejs.js#1070) `Error.prepareStackTrace` 关闭协议 _错误_ 外观.

### 活动

-   [x] 删除 `.internal`。 。 。 .

因为事件既是命名空间,又是函数,所以导出的方式如下:

```js
/** @const */
var events = {};
/**
 * @extends {NodeJS.EventEmitter}
 * @constructor
 * @struct
 */
events = function() {};
```

这将导致编译器警告:

```js
v8/events.js:15: WARNING - accessing name events in externs has no effect. Perhaps you forgot to add a var keyword?
events = function() {};
^^^^^^

v8/events.js:15: WARNING - constant events assigned a value more than once.
Original definition at v8/events.js:9
events = function() {};
^^^^^^^^^^^^^^^^^^^^^^
```

因此,我们把两个宣言 合并成

```js
/**
 * @extends {NodeJS.EventEmitter}
 * @constructor
 * @struct
 */
var events = function() {};
```

### 流线

```js
// export class Duplex extends Readable implements Writable {
types-v8/stream.d.ts(200,7): warning TS0: omitting @implements of a class: Writable
```

-   [x] 删除 `.internal`。 。 。 .
-   [x] 因为 `@constructor` 无法继承一个以上类别 `@extends {Writable}` 但是,没有添加这些方法,因为这些方法被界定为执行 `Writable` 接口,它们被添加到双面原型本身.

与 _事件_ (见上文),将声明倒闭为 `var` 定义.

```js
/**
 * @extends {events.EventEmitter}
 * @constructor
 * @struct
 */
var stream = function() {};
```

### 显示

```js
// export function fail(message?: string): never;
types-v8/assert.d.ts(19,7): warning TS0: should not emit a 'never' type

// export function fail(actual: any, expected: any, message?: string, operator?: string, stackStartFn?: Function): never;
types-v8/assert.d.ts(20,7): warning TS0: should not emit a 'never' type
```

-   [x] 删除 `.internal` 财务报告和审定财务报表 `{}` 命名空间声明(描述见事件).
-   [x] 尽管警告 `AssertionError` [正在扩展](https://npmcn.com/package/%40externs/nodejs/v8/assert.js#16) `Error`。 。 。 .
    
    ```js
    // export class AssertionError implements Error {
    types-v8/assert.d.ts(4,7): warning TS0: omitting heritage reference to a type/value conflict: Error
    ```
    

#### 类型中缺少的方法

-   [ ] `doesNotReject` 添加于 `V8.13.0`
-   [ ] `rejects` 添加于 `V8.13.0`
-   [ ] `strict` 添加于 `V8.13.0`

### 页:1

有一些缺失的API出现在了节点8中,这些API不存在类型.

#### 类型中缺少的方法

-   [ ] `serialize`
-   [ ] `deserialize`
-   [ ] `cachedDataVersionTag`
-   [ ] `Serializer`
-   [ ] `Deserializer`
-   [ ] `DefaultSerializer`
-   [ ] `DefaultDeserializer`

### 组

-   [x] [已经存在](https://npmcn.com/package/%40externs/nodejs/v8/cluster.js#151) `@ extends {events.EventEmitter}` 改为 _组_。 。 。 .
    
    ```js
    // export interface Cluster extends events.EventEmitter {
    types-v8/cluster.d.ts(98,3): warning TS0: omitting interface deriving from class: events.EventEmitter
    ```
    

#### 类型中缺少的方法

-   [ ] `SCHED_NONE`
-   [ ] `SCHED_RR`
-   [ ] `domain`
-   [ ] `schedulingPolicy`

### 密码

> 这个 `crypto` 外观 [已经存在](https://github.com/google/closure-compiler/blob/master/externs/browser/w3c_webcrypto.js#L552) 内 _海合会_,因此,外部的命名空间被添加为\`_密码_。 。 。 .

```js
types-v8/crypto.d.ts(10,14): warning TS0: type/symbol conflict for Certificate, using {?} for now
```

-   [ ] 修复 `Certificate` 冲突.

#### 类型中缺少的方法

-   [ ] `Cipheriv`
-   [ ] `Decipheriv`
-   [ ] `DiffieHellmanGroup`
-   [ ] `Sign`
-   [ ] `constants`
-   [ ] `createDiffieHellmanGroup`
-   [ ] `prng`
-   [ ] `rng`
-   [ ] `setEngine`

### 单位

```js
types-v8/dns.d.ts(272,7): warning TS0: unhandled anonymous type with multiple call signatures

types-v8/dns.d.ts(273,7): warning TS0: unhandled anonymous type with multiple call signatures

types-v8/dns.d.ts(274,7): warning TS0: unhandled anonymous type with multiple call signatures
```

这个 _解析器_ 类有 `resolve`, (中文(简体) ), `resolve4`, (中文(简体) ), `resolve6` 但是,这些方法有多个调用签名.

```ts
export function resolve(hostname: string, callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void;
export function resolve(hostname: string, rrtype: "A", callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void;
export function resolve(hostname: string, rrtype: "AAAA", callback: (err: NodeJS.ErrnoException, addresses: string[]) => void): void;
// + N more

export class Resolver {
  ...
  resolve: typeof resolve;
  resolve4: typeof resolve4;
  resolve6: typeof resolve6;
```

这意味着外接器无法生成 .

```js
/** @type {?} */
dns.Resolver.prototype.resolve;
/** @type {?} */
dns.Resolver.prototype.resolve4;
/** @type {?} */
dns.Resolver.prototype.resolve6;
```

-   [ ] 为每种方法添加一个类型.

### Fs 数

```js
//   export interface FSWatcher extends events.EventEmitter {
types-v8/fs.d.ts(46,3): warning TS0: omitting interface deriving from class: events.EventEmitter
```

-   [x] [添加 `@extends {events.EventEmitter}`](https://npmcn.com/package/%40externs/nodejs/v8/fs.js#L90) 改为 _FS 监视器_。 。 。 .

### 调值

```js
// export interface ClearTextStream extends stream.Duplex {
types-v8/tls.d.ts(327,3): warning TS0: omitting interface deriving from class: stream.Duplex
```

-   [x] [添加 `* @extends {stream.Duplex}`](https://npmcn.com/package/%40externs/nodejs/v8/tld.js#339) 改为 _清除图文集_。 。 。 .

### 小时

更新属性签名 .

```js
/* TODO: PropertySignature: http.'accept' */
```

-   [ ] 添加属性签名 .
-   [x] 添加 `maxHeaderSize` 类型.

### 小时

```js
types-v8/https.d.ts(12,3): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/https.d.ts(25,3): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/https.d.ts(44,3): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/https.d.ts(45,3): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/https.d.ts(46,3): warning TS0: unhandled type flags: IncludesNonWideningType
```

### Http2 数据

```js
// export interface Http2Stream extends stream.Duplex {
types-v8/http2.d.ts(61,3): warning TS0: omitting interface deriving from class: stream.Duplex

// export interface Http2Session extends events.EventEmitter {
types-v8/http2.d.ts(248,3): warning TS0: omitting interface deriving from class: events.EventEmitter

// export interface Http2Server extends net.Server {
types-v8/http2.d.ts(405,3): warning TS0: omitting interface deriving from class: net.Server

// export interface Http2SecureServer extends tls.Server {
types-v8/http2.d.ts(449,3): warning TS0: omitting interface deriving from class: tls.Server
```

### 兹利布

```js
types-v8/zlib.d.ts(32,3): warning TS0: omitting interface deriving from class: stream.Transform

types-v8/zlib.d.ts(33,3): warning TS0: omitting interface deriving from class: stream.Transform

types-v8/zlib.d.ts(34,3): warning TS0: omitting interface deriving from class: stream.Transform

types-v8/zlib.d.ts(35,3): warning TS0: omitting interface deriving from class: stream.Transform

types-v8/zlib.d.ts(36,3): warning TS0: omitting interface deriving from class: stream.Transform

types-v8/zlib.d.ts(37,3): warning TS0: omitting interface deriving from class: stream.Transform

types-v8/zlib.d.ts(38,3): warning TS0: omitting interface deriving from class: stream.Transform
```

### 子进程( P)

```js
types-v8/child_process.d.ts(10,3): warning TS0: omitting interface deriving from class: events.EventEmitter

types-v8/child_process.d.ts(126,3): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/child_process.d.ts(129,3): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/child_process.d.ts(133,3): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/child_process.d.ts(139,3): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/child_process.d.ts(144,7): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/child_process.d.ts(145,7): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/child_process.d.ts(147,7): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/child_process.d.ts(172,3): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/child_process.d.ts(174,3): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/child_process.d.ts(198,3): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/child_process.d.ts(199,3): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/child_process.d.ts(213,7): warning TS0: unhandled type flags: IncludesNonWideningType

types-v8/child_process.d.ts(214,7): warning TS0: unhandled type flags: IncludesNonWideningType
```

### UTI 语录

```js
// export var inspect: {
types-v8/util.d.ts(11,14): warning TS0: unhandled anonymous type
```

在这里 `inspect` 其所有可能的签名均用卷括号来定义. `tsickle` 这不理解.

```js
export var inspect: {
  (object: any, showHidden?: boolean, depth?: number | null, color?: boolean): string;
  (object: any, options: InspectOptions): string;
  colors: {
    [color: string]: [number, number] | undefined
  }
  styles: {
    [style: string]: string | undefined
  }
  defaultOptions: InspectOptions;
  custom: symbol;
};
```

```js
// export interface CustomPromisify<TCustom extends Function> extends Function {
types-v8/util.d.ts(42,3): warning TS0: omitting heritage reference to a type/value conflict: Function
```

### 纯码

```js
//   export var ucs2: ucs2;
types-v8/punycode.d.ts(6,14): warning TS0: type/symbol conflict for ucs2, using {?} for now
```

### 读行

```js
// export interface ReadLine extends events.EventEmitter {
types-v8/readline.d.ts(17,3): warning TS0: omitting interface deriving from class: events.EventEmitter
```

-   [x] [重命名](https://npmcn.com/package/%40externs/nodejs/v8/readline.js#185) `interface` 参数到 `_interface`,否则显示以下错误:
    
    ```js
    @externs/nodejs/v8/readline.js:185: ERROR - Parse error. ')' expected
    readline.emitKeypressEvents = function(stream, interface) {};
                                                  ^
    ```
    

### 调用

```js
// export class Recoverable extends SyntaxError {
types-v8/repl.d.ts(65,3): warning TS0: omitting heritage reference to a type/value conflict: SyntaxError
```

### 用户

```ts
node_modules/util/index.js:11: WARNING - Property getSystemErrorName never defined on util
  getSystemErrorName,
  ^^^^^^^^^^^^^^^^^^
```

\- \[x\] 添加到 `util.getSystemErrorName` 以手动复制.

### 查询字符串

\- \[x\] 添加 `decode` 财务报告和审定财务报表 `encode` 别名改为 `parse` 财务报告和审定财务报表 `stringify`。 。 。 .

### 净额

\- \[x\] 添加数据 `Stream` 别名改为 `Socket` (目前该类型不正确,即:, `/** @type {net.Socket} */ net.Stream`。此选项指定了实例类型,而不是构造器类型.

[![](https://npmcn.com/.documentary/section-breaks/8.svg?sanitize=true)](https://npmcn.com/package/%40externs/nodejs/#readme-table-of-contents)

## 妇女

目前,在有些忽略了externs中没有定义的属性和方法之后,仍有一些警告还没有处理.

```ts
node_modules/buffer/index.js:6: WARNING - [JSC_INEXISTENT_PROPERTY] Property constants never defined on buffer
  constants,
  ^^^^^^^^^

node_modules/buffer/index.js:7: WARNING - [JSC_INEXISTENT_PROPERTY] Property kMaxLength never defined on buffer
  kMaxLength,
  ^^^^^^^^^^

node_modules/buffer/index.js:8: WARNING - [JSC_INEXISTENT_PROPERTY] Property kStringMaxLength never defined on buffer
  kStringMaxLength,
  ^^^^^^^^^^^^^^^^

node_modules/console/index.js:6: WARNING - [JSC_INEXISTENT_PROPERTY] Property context never defined on Console
  context,
  ^^^^^^^

node_modules/constants/index.js:4: WARNING - [JSC_INEXISTENT_PROPERTY] Property COPYFILE_EXCL never defined on constants
  COPYFILE_EXCL,
  ^^^^^^^^^^^^^

node_modules/constants/index.js:27: WARNING - [JSC_INEXISTENT_PROPERTY] Property EDQUOT never defined on constants
  EDQUOT,
  ^^^^^^

node_modules/constants/index.js:44: WARNING - [JSC_INEXISTENT_PROPERTY] Property EMULTIHOP never defined on constants
  EMULTIHOP,
  ^^^^^^^^^

node_modules/constants/index.js:95: WARNING - [JSC_INEXISTENT_PROPERTY] Property ESTALE never defined on constants
  ESTALE,
  ^^^^^^

node_modules/constants/index.js:103: WARNING - [JSC_INEXISTENT_PROPERTY] Property OPENSSL_VERSION_NUMBER never defined on constants
  OPENSSL_VERSION_NUMBER,
  ^^^^^^^^^^^^^^^^^^^^^^

node_modules/constants/index.js:125: WARNING - [JSC_INEXISTENT_PROPERTY] Property RSA_PSS_SALTLEN_AUTO never defined on constants
  RSA_PSS_SALTLEN_AUTO,
  ^^^^^^^^^^^^^^^^^^^^

node_modules/constants/index.js:126: WARNING - [JSC_INEXISTENT_PROPERTY] Property RSA_PSS_SALTLEN_DIGEST never defined on constants
  RSA_PSS_SALTLEN_DIGEST,
  ^^^^^^^^^^^^^^^^^^^^^^

node_modules/constants/index.js:127: WARNING - [JSC_INEXISTENT_PROPERTY] Property RSA_PSS_SALTLEN_MAX_SIGN never defined on constants
  RSA_PSS_SALTLEN_MAX_SIGN,
  ^^^^^^^^^^^^^^^^^^^^^^^^

node_modules/constants/index.js:139: WARNING - [JSC_INEXISTENT_PROPERTY] Property SIGINFO never defined on constants
  SIGINFO,
  ^^^^^^^

node_modules/constants/index.js:216: WARNING - [JSC_INEXISTENT_PROPERTY] Property UV_FS_COPYFILE_EXCL never defined on constants
  UV_FS_COPYFILE_EXCL,
  ^^^^^^^^^^^^^^^^^^^

node_modules/domain/index.js:4: WARNING - [JSC_INEXISTENT_PROPERTY] Property active never defined on domain
  active,
  ^^^^^^

node_modules/domain/index.js:6: WARNING - [JSC_INEXISTENT_PROPERTY] Property createDomain never defined on domain
  createDomain,
  ^^^^^^^^^^^^

node_modules/http2/index.js:3: WARNING - [JSC_BAD_PRIVATE_PROPERTY_ACCESS] Access to private property Http2ServerRequest of {
  ClientHttp2Session: (typeof http2.ClientHttp2Session),
  ClientHttp2Stream: (typeof http2.ClientHttp2Stream),
  ClientSessionOptions: None,
  ClientSessionRequestOptions: (typeof http2.ClientSessionRequestOptions),
  Http2SecureServer: (typeof http2.Http2SecureServer),
  Http2Server: (typeof http2.Http2Server),
  Http2ServerRequest: (typeof http2.Http2ServerRequest),
  Http2ServerResponse: (typeof http2.Http2ServerResponse),
  Http2Session: (typeof http2.Http2Session),
  Http2Stream: (typeof http2.Http2Stream), ...
} not allowed here.
  Http2ServerRequest,
  ^^^^^^^^^^^^^^^^^^

node_modules/http2/index.js:4: WARNING - [JSC_BAD_PRIVATE_PROPERTY_ACCESS] Access to private property Http2ServerResponse of {
  ClientHttp2Session: (typeof http2.ClientHttp2Session),
  ClientHttp2Stream: (typeof http2.ClientHttp2Stream),
  ClientSessionOptions: None,
  ClientSessionRequestOptions: (typeof http2.ClientSessionRequestOptions),
  Http2SecureServer: (typeof http2.Http2SecureServer),
  Http2Server: (typeof http2.Http2Server),
  Http2ServerRequest: (typeof http2.Http2ServerRequest),
  Http2ServerResponse: (typeof http2.Http2ServerResponse),
  Http2Session: (typeof http2.Http2Session),
  Http2Stream: (typeof http2.Http2Stream), ...
} not allowed here.
  Http2ServerResponse,
  ^^^^^^^^^^^^^^^^^^^

node_modules/process/index.js:7: WARNING - [JSC_INEXISTENT_PROPERTY] Property assert never defined on NodeJS.Process
  assert,
  ^^^^^^

node_modules/process/index.js:8: WARNING - [JSC_INEXISTENT_PROPERTY] Property binding never defined on NodeJS.Process
  binding,
  ^^^^^^^

node_modules/process/index.js:14: WARNING - [JSC_INEXISTENT_PROPERTY] Property dlopen never defined on NodeJS.Process
  dlopen,
  ^^^^^^

node_modules/process/index.js:21: WARNING - [JSC_INEXISTENT_PROPERTY] Property features never defined on NodeJS.Process
  features,
  ^^^^^^^^

node_modules/process/index.js:28: WARNING - [JSC_INEXISTENT_PROPERTY] Property initgroups never defined on NodeJS.Process
  initgroups,
  ^^^^^^^^^^

node_modules/process/index.js:32: WARNING - [JSC_INEXISTENT_PROPERTY] Property moduleLoadList never defined on NodeJS.Process
  moduleLoadList,
  ^^^^^^^^^^^^^^

node_modules/process/index.js:37: WARNING - [JSC_INEXISTENT_PROPERTY] Property ppid never defined on NodeJS.Process
  ppid,
  ^^^^

node_modules/process/index.js:38: WARNING - [JSC_INEXISTENT_PROPERTY] Property reallyExit never defined on NodeJS.Process
  reallyExit,
  ^^^^^^^^^^

node_modules/repl/index.js:4: WARNING - [JSC_INEXISTENT_PROPERTY] Property REPL_MODE_MAGIC never defined on repl
  REPL_MODE_MAGIC,
  ^^^^^^^^^^^^^^^

node_modules/repl/index.js:5: WARNING - [JSC_INEXISTENT_PROPERTY] Property REPL_MODE_SLOPPY never defined on repl
  REPL_MODE_SLOPPY,
  ^^^^^^^^^^^^^^^^

node_modules/repl/index.js:6: WARNING - [JSC_INEXISTENT_PROPERTY] Property REPL_MODE_STRICT never defined on repl
  REPL_MODE_STRICT,
  ^^^^^^^^^^^^^^^^

node_modules/repl/index.js:9: WARNING - [JSC_INEXISTENT_PROPERTY] Property writer never defined on repl
  writer,
  ^^^^^^

node_modules/timers/index.js:3: WARNING - [JSC_INEXISTENT_PROPERTY] Property active never defined on timers
  active,
  ^^^^^^

node_modules/timers/index.js:7: WARNING - [JSC_INEXISTENT_PROPERTY] Property enroll never defined on timers
  enroll,
  ^^^^^^

node_modules/timers/index.js:11: WARNING - [JSC_INEXISTENT_PROPERTY] Property unenroll never defined on timers
  unenroll,
  ^^^^^^^^

node_modules/tls/index.js:5: WARNING - [JSC_INEXISTENT_PROPERTY] Property DEFAULT_CIPHERS never defined on tls
  DEFAULT_CIPHERS,
  ^^^^^^^^^^^^^^^

node_modules/tls/index.js:7: WARNING - [JSC_INEXISTENT_PROPERTY] Property SLAB_BUFFER_SIZE never defined on tls
  SLAB_BUFFER_SIZE,
  ^^^^^^^^^^^^^^^^

node_modules/tls/index.js:13: WARNING - [JSC_INEXISTENT_PROPERTY] Property convertALPNProtocols never defined on tls
  convertALPNProtocols,
  ^^^^^^^^^^^^^^^^^^^^

node_modules/tls/index.js:14: WARNING - [JSC_INEXISTENT_PROPERTY] Property convertNPNProtocols never defined on tls
  convertNPNProtocols,
  ^^^^^^^^^^^^^^^^^^^

node_modules/tls/index.js:19: WARNING - [JSC_INEXISTENT_PROPERTY] Property parseCertString never defined on tls
  parseCertString,
  ^^^^^^^^^^^^^^^

0 error(s), 38 warning(s), 97.5% typed
```

[![](https://npmcn.com/.documentary/section-breaks/9.svg?sanitize=true)](https://npmcn.com/package/%40externs/nodejs/#readme-table-of-contents)

## 版权

版权属于作者.

**节点.js 8.10的定义类型** 通过:

-   微软类型脚本 [https://github.com/微软](https://github.com/Microsoft)
-   绝对是Tyed [https://github.com/Definitely Typed (英语)](https://github.com/DefinitelyTyped)
-   帕兰比尔·辛格 [https://github.com/parambiers (英语)](https://github.com/parambirs)
-   克里斯蒂安·瓦格兰·特尔内斯 [https://github.com/tellnes (中文(简体) )](https://github.com/tellnes)
-   威尔科·巴克克 [https://github.com/维尔科巴克克](https://github.com/WilcoBakker)
-   尼古拉斯·沃伊格特 [https://github.com/octo-sniffle (中文(简体) )](https://github.com/octo-sniffle)
-   Chigozirim C (英语). [https://github.com/smac89 (英语)](https://github.com/smac89)
-   弗拉纳 [https://github.com/弗拉纳](https://github.com/Flarna)
-   马略兹·维克托尔奇克 [https://github.com/mwiktorczyk (中文(简体) )](https://github.com/mwiktorczyk)
-   页:1 [https://github.com/wwwy3y3 (中文(简体) )](https://github.com/wwwy3y3)
-   迪维达斯·巴卡纳斯 [https://github.com/DeividasBakanas 页面存档备份,存于互联网档案馆](https://github.com/DeividasBakanas)
-   开尔文仁 [https://github.com/kjin (中文(简体) )](https://github.com/kjin)
-   阿维斯·唐 [https://github.com/alvis 页面存档备份,存于互联网档案馆](https://github.com/alvis)
-   塞巴斯蒂安·西尔伯曼 [https://github.com/eps1lon (英语)](https://github.com/eps1lon)
-   汉内斯·马格努松 [https://github.com/汉斯-马格努松-CK](https://github.com/Hannes-Magnusson-CK)
-   阿尔贝托·希亚贝尔 [https://github.com/jkomyno (英语)](https://github.com/jkomyno)
-   胡维 [https://github.com/hoo29 (英语)](https://github.com/hoo29)
-   尼古拉斯·伊文(英语:Nicolas Even) [https://github.com/n-e (英语)](https://github.com/n-e)
-   布鲁诺·舍夫勒 [https://github.com/brunoscheufler 页面存档备份,存于互联网档案馆](https://github.com/brunoscheufler)
-   万凯 [https://github.com/KSXGitHub 页面存档备份,存于互联网档案馆](https://github.com/KSXGitHub)
-   利苏德 [https://github.com/islisude (英语)](https://github.com/islishude)
-   安德鲁·马卡罗夫 [https://github.com/r3nya (英语)](https://github.com/r3nya)
-   乔迪·奥利维拉斯·罗维拉 [https://github.com/j-oliveras (英语)](https://github.com/j-oliveras)
-   塔尼克·邦比哈特 [https://github.com/bhongy (中文(简体) )](https://github.com/bhongy)

从 [https://github.com/Definitely Typed/Definitely Typed 互联网档案馆的存檔,存档日期2014-12-22](https://github.com/DefinitelyTyped/DefinitelyTyped)

| [![Art Deco](https://raw.githubusercontent.com/wrote/wrote/master/images/artdeco.png)](https://artd.eco/) | © [艺术代科](https://artd.eco/) 页:1 [拆装](https://artd.eco/depack) 2019 (英语) | [![Tech Nation Visa](https://raw.githubusercontent.com/idiocc/cookies/master/wiki/arch4.jpg)](https://www.technation.sucks/ "Tech Nation Visa") | [国家技术签证](https://www.technation.sucks/) |
| --- | --- | --- | --- |

[![](https://npmcn.com/.documentary/section-breaks/-1.svg?sanitize=true)](https://npmcn.com/package/%40externs/nodejs/#readme-table-of-contents)

## 常见问题

### @externs/nodejs 是什么？

\(原始内容存档于2018-10-21\)\. The Close Compiler Externs for Node\.JS\.

### 如何安装 @externs/nodejs？

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

### @externs/nodejs 支持 TypeScript 吗？

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

### @externs/nodejs 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @externs/nodejs 可以商用吗？

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

### @externs/nodejs 的下载量有多少？

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

### @externs/nodejs 还在维护吗？

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

