# @doctormckay/stdlib 中文文档

规范地址：https://npmcn.com/package/%40doctormckay/stdlib/

版本：2\.10\.0
npm 元数据更新时间：2024-01-16T04:44:42.042Z
中文译文更新时间：2026-11-12T14:10:25.486Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：223 kB，102 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=12\.22\.0
- 运行依赖：1 个
- 首次发布：2017-11-04T07:53:12.825Z
- 最新版本发布：2024-01-16T04:44:41.831Z
- 近 30 天下载量：327550（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：45（近 12 个月 0 个）

## 中文简介

在Node.js,我发现通常有用的“标准库”

## 安装

```sh
npm install @doctormckay/stdlib
```

也可以使用：`pnpm add @doctormckay/stdlib`、`yarn add @doctormckay/stdlib`、`bun add @doctormckay/stdlib`

## README

# 标准库

这个模块是供我个人使用的 包含一些我相信节点Js标准库的东西 _应_ 有,但是没有.

但不要指望我注意功能要求(bug reports in though. 正如我在上面所说,这实际上只是为了我个人的用途(如在 @doctormckay npm中的一切) 名称空间).

# 目录

-   [阵列](https://npmcn.com/package/%40doctormckay/stdlib/#readme-arrays)
    -   [独一无二](https://npmcn.com/package/%40doctormckay/stdlib/#readme-uniquearray-strict)
-   [货币](https://npmcn.com/package/%40doctormckay/stdlib/#readme-concurrency)
    -   [司马发](https://npmcn.com/package/%40doctormckay/stdlib/#readme-semaphore)
-   [数据结构](https://npmcn.com/package/%40doctormckay/stdlib/#readme-data-structures)
    -   [Async 队列](https://npmcn.com/package/%40doctormckay/stdlib/#readme-asyncqueue)
    -   [最少使用缓存](https://npmcn.com/package/%40doctormckay/stdlib/#readme-leastusedcache)
    -   [TTLCACH 语言](https://npmcn.com/package/%40doctormckay/stdlib/#readme-ttlcache)
    -   [堆栈](https://npmcn.com/package/%40doctormckay/stdlib/#readme-stack)
    -   [队列](https://npmcn.com/package/%40doctormckay/stdlib/#readme-queue)
-   [欢呼](https://npmcn.com/package/%40doctormckay/stdlib/#readme-hashing)
    -   [md5 数据](https://npmcn.com/package/%40doctormckay/stdlib/#readme-md5input-outputform)
    -   [缩写 1](https://npmcn.com/package/%40doctormckay/stdlib/#readme-sha1input-outputform)
    -   [萨瓦256](https://npmcn.com/package/%40doctormckay/stdlib/#readme-sha256input-outputform)
    -   [第32条](https://npmcn.com/package/%40doctormckay/stdlib/#readme-crc32input-outputform)
-   [HTTP 密码](https://npmcn.com/package/%40doctormckay/stdlib/#readme-http)
    -   [获取Proxy代理](https://npmcn.com/package/%40doctormckay/stdlib/#readme-getproxyagentsecure-proxyurl-proxytimeout)
    -   [Http 客户端](https://npmcn.com/package/%40doctormckay/stdlib/#readme-httpclient)
-   [图片](https://npmcn.com/package/%40doctormckay/stdlib/#readme-ipv4)
    -   [输入到](https://npmcn.com/package/%40doctormckay/stdlib/#readme-inttostringipint)
    -   [字符串输入](https://npmcn.com/package/%40doctormckay/stdlib/#readme-stringtointipstring)
-   [对象](https://npmcn.com/package/%40doctormckay/stdlib/#readme-objects)
    -   [克隆](https://npmcn.com/package/%40doctormckay/stdlib/#readme-cloneobj)
    -   [深等号](https://npmcn.com/package/%40doctormckay/stdlib/#readme-deepequalobj1-obj2-strict)
-   [监督办](https://npmcn.com/package/%40doctormckay/stdlib/#readme-os)
    -   [应用程序目录](https://npmcn.com/package/%40doctormckay/stdlib/#readme-appdatadirectoryparams)
-   [分析](https://npmcn.com/package/%40doctormckay/stdlib/#readme-parsing)
    -   [命令](https://npmcn.com/package/%40doctormckay/stdlib/#readme-orderedargsinput)
-   [承诺](https://npmcn.com/package/%40doctormckay/stdlib/#readme-promises)
    -   [承诺](https://npmcn.com/package/%40doctormckay/stdlib/#readme-timeoutpromisetimeout-executor)
    -   [回调 保证](https://npmcn.com/package/%40doctormckay/stdlib/#readme-callbackpromisecallbackargs-callback-isoptional-executor)
    -   [超时调用返回承诺](https://npmcn.com/package/%40doctormckay/stdlib/#readme-timeoutcallbackpromisetimeout-callbackargs-callback-isoptional-executor)
    -   [睡眠 同步](https://npmcn.com/package/%40doctormckay/stdlib/#readme-sleepasyncsleepmilliseconds)
-   [渲染](https://npmcn.com/package/%40doctormckay/stdlib/#readme-rendering)
    -   [进度栏](https://npmcn.com/package/%40doctormckay/stdlib/#readme-progressbarvalue-maxvalue-barwidth-showpercentage)
-   [时间](https://npmcn.com/package/%40doctormckay/stdlib/#readme-time)
    -   [时间戳](https://npmcn.com/package/%40doctormckay/stdlib/#readme-timestampstring)
-   [单位](https://npmcn.com/package/%40doctormckay/stdlib/#readme-units)
    -   [人可读字节](https://npmcn.com/package/%40doctormckay/stdlib/#readme-humanreadablebytesbytes-binary)

# 阵列

```js
const {Arrays} = require('@doctormckay/stdlib');
import {unique} from '@doctormckay/stdlib/arrays';
```

## 独有( 阵列\[, 严格\])

-   `array` - 从中获取独特元素的阵列
-   `strict` -可选的 过 `true` 使用严格的比较,或 `false` 用来进行微弱的比较。 在对大型阵列使用微弱比较时,性能会大幅提升. 默认 `false`。 。 。 .

返回只包含输入数组中的独特元素的数组,顺序为它们首次出现的顺序 .

# 货币

## 司马发

```js
const {Concurrency} = require('@doctormckay/stdlib');
import {Semaphore} from '@doctormckay/stdlib/concurrency';
let sem = new Concurrency.Semaphore();
```

仅确保一个(或若干个)同步任务的母体同时运行.

### 构造器(\[通 )

-   `concurrency` - 最高锁数 semaphore将允许一次。 可选,默认 1

创建一个带有某种货币限制的新司马phore.

### 等待( 回调)

-   `callback` - 等待结束时需要调用的职能
    -   `release` - 一个功能,你需要呼叫 一旦你完成释放 semaphore

等出自司马pho. 一旦空出,所提供的功能将被调用. 如果司马发已经自由了, 立即调用回话 .

一旦你完成处理 并准备好释放 semaphore,打电话 `release()`。 。 。 .

### 等待阿辛克 ()

返回解约后解约 。 承诺以功能解决 `release`,这个你 处理完毕后一定要打电话 准备释放血浆.

```js
import {Semaphore} from '@doctormckay/stdlib/concurrency';
let sem = new Semaphore();
let release = await sem.waitAsync();
// do something
release();
```

### 时空 ()

回返 `true` 如果血浆是免费的,或者 `false` 如果不是的话。 如果有人打来电话的话,就自由了 `wait()` 将 导致立即援引回调.

# 数据结构

## Async 队列

```js
const {DataStructures} = require('@doctormckay/stdlib');
import {AsyncQueue} from '@doctormckay/stdlib/data_structures';
let queue = new DataStructures.AsyncQueue(processItemSomehow, 2);
```

自动从阵列中弹出第一个元素并运行自动同步的队列 `worker` 在它,到你的设定 `concurrency` 限制。 非常类似 与 `async` 模块的 [队列](https://caolan.github.io/async/docs.html#queue)。 。 。 .

### 构造器( 工人\[, 货币\] )

-   `worker` - 每次从队列跳出项目时都会引用的函数。 此项职能应采纳以下论点:
    -   `item` - 你推入队列的物品
    -   `callback` - 处理完成后您应该拨打的函数 。 这个回调的第一个论点应该是 `Error` 如果处理失败,或 `null` 如果成功的话。 其余的论据按原样转至 `push` 方法.

### 暂停( c)

暂停处决。 在暂停期间,没有新物品被解排并交给工人,但任何工人目前处理 将会被允许完成.

### 恢复( )

暂停后恢复行刑. 这将重新开始向工人移交任务.

### 杀( )

删除 `drain` 财务报告和审定财务报表 `empty` 调用并空出队列。 任何已经在工作的工人将获准 结束。 在你杀了AsyncQueee之后,你不能再使用它了. 任何进一步企图 `push` 输入 Async 队列 将扔出一个 `Error`。 。 。 .

### 推(项目\[,回调\])

-   `item` - 推到队列后方的项目
-   `callback` - 处理完成后可选择的回调。 给回调的论据与工人的回调相同.

将新项目添加到队列中, 如果您还没有达到货币限制, 请立即将其交给 工人们.

### 货币

表示货币限额的财产 。 您可以为此指定更改货币限额, 但它只会 生效.

### 劳动者

包含工人函数的属性,用于处理队列中的项目. 如果 需要帮助.

### 运行

仅读财产,说明目前有多少工人在经营.

### 已暂停

仅读布尔属性, 表示队列是否暂停 .

### 长度

仅读属性,表示队列中还有多少项,等待分配给工人.

### 排水量

您可以指定一个函数的属性, 当队列为空且最后一个工人完成时, 函数将被调用 .

### 空

您可以指定一个函数的属性, 当队列中最后一个项目被交给工人时, 函数将被调用 .

### 错误

一个您可以指定一个函数的属性, 当工人完成错误时, 该函数将被调用 . 函数的第一个参数是出错,第二个是导致它的项目.

## 最少使用缓存

```js
const {DataStructures} = require('@doctormckay/stdlib');
let cache = new DataStructures.LeastUsedCache(100, 30000);
```

### 构造器( 最大项目, gcInterval)

-   `maxItems` 最小用户卡切在开始浏览旧东西前将存储的最大项数
-   `gcInterval` - 垃圾收集努力之间的最低毫秒数

### 添加( 键, val)

-   `key` - 弦键
-   `val` - 任何类型的价值

在缓存中添加新条目 .

### 获取( 键)

-   `key` - 弦键

从缓存中获取一个值 。 回返 `null` 如果钥匙不存在的话.

### 删除( 键)

-   `key` - 弦键

从缓存中删除一个值.

### 获取 Keys ()

返回包含缓存中所有密钥的数组.

### 检查GC( )

请检查date=中的日期值 (帮助) 垃圾收集是否必要,如果需要,请检查是否有必要.

### gc( ) (中文( ) )

手动收集垃圾,不等待适当的超时.

## TTLCACH 语言

```js
const {DataStructures} = require('@doctormckay/stdlib');
let cache = new DataStructures.TTLCache(10000);
```

### 构造器( ttlMilliseconds)

-   `ttlMilliseconds` - 从缓存中取出物品的毫秒数.

### 添加( 键, 值 \[, ttlMilliseconds\] )

-   `key` - 弦键
-   `val` - 任何类型的价值
-   `ttlMilliseconds` -可选的 覆盖此项目的默认 TTL 。 如果省略,将使用默认的 TTL .

在缓存中添加新条目 .

### 获取( 键)

-   `key` - 弦键

从缓存中获取一个值 。 回返 `null` 如果钥匙不存在的话.

### 删除( 键)

-   `key` - 弦键

从缓存中删除一个值.

### 获取 Keys ()

返回包含缓存中所有密钥的数组.

### 清除( c)

清除整个缓存.

## 队列

```js
const {DataStructures} = require('@doctormckay/stdlib');
let queue = new DataStructures.Queue();
```

只是一个基本的队列,作为双链接列表执行 .

### 构造器( )

### 推( 项目)

-   `item` - 推入后排的项目

将项目推入队列的后部。 返回队列的新长度 。 别名: `enqueue(item)`

### 弹出( b)

从队列中删除第一个项目并返回。 回返 `null` 如果队列为空。 别名: `dequeue()`

### 空 ()

删除并丢弃队列中的每一项目.

### 长度

显示队列中有多少项的属性 .

## 堆栈

```js
const {DataStructures} = require('@doctormckay/stdlib');
let stack = new DataStructures.Stack();
```

只是一个基本堆栈,作为链接列表执行.

### 构造器( )

### 推( 项目)

-   `item` - 把它推到堆起的顶上

将一个项目推到堆栈上方。 返回堆栈新长度 .

### 弹出( b)

从堆栈中删除顶部项目并返回。 回返 `null` 如果堆栈是空的.

### 空 ()

删除并丢弃堆栈中的每个项目.

### 长度

显示堆栈中有多少项的属性 .

# 欢呼

```js
const {Hashing} = require('@doctormckay/stdlib');
```

### md5(输入\[,输出格式\])

-   `input` - 缓冲或字符串(如果字符串,将解释为UTF-8)
-   `outputForm` - 表示表单的字符串 [缓冲编码](https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings),或者替换 `buffer` 仅仅返回缓冲器。 默认 `hex`。 。 。 .

返回输入的 MD5 散列 .

### sha1( 输入\[, 输出格式\] )

-   `input` - 缓冲或字符串(如果字符串,将解释为UTF-8)
-   `outputForm` - 表示表单的字符串 [缓冲编码](https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings),或者替换 `buffer` 仅仅返回缓冲器。 默认 `hex`。 。 。 .

返回输入的 SHA-1 散列 .

### sha256(输入 \[, 输出表格\])

-   `input` - 缓冲或字符串(如果字符串,将解释为UTF-8)
-   `outputForm` - 表示表单的字符串 [缓冲编码](https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings),或者替换 `buffer` 仅仅返回缓冲器。 默认 `hex`。 。 。 .

返回输入的SHA-256散列.

### crc32( 输入\[, 输出表格\] )

-   `input` - 缓冲或字符串(如果字符串,将解释为UTF-8)
-   `outputForm` - 表示表单的字符串 [缓冲编码](https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings),或者替换 `buffer` 仅仅返回缓冲器或 `number` 以返回未签名的32位整数。 默认 `number`。 。 。 .

返回输入的 CR32 散列 .

# HTTP 密码

```js
const {HTTP} = require('@doctormckay/stdlib');
import {getProxyAgent, HttpClient} from '@doctormckay/stdlib/http';
```

### 获取Proxy Agent( 安全性 \[, 代理 Url \[, 代理 Timeout \] \] )

-   `secure` - 说吧 `true` 如果此代理将被用于安全( HTTPS) 请求,或 `false` 如果不是的话
-   `proxyUrl` - URL到你的代理, 或东西发疯只是得到 `false` 返回( 未显示代理)
-   `proxyTimeout` - 连接代理服务器的超时, 以毫秒计; 默认值 `5000` (5秒)

获得一个(HTTP QQ HTTPS). 可以通过 HTTP/HTTPS 代理服务器进行请求的代理 .

```js
const StdLib = require('@doctormckay/stdlib');
const HTTPS = require('https');

HTTPS.get({
  host: 'icanhazip.com',
  port: 443,
  agent: StdLib.HTTP.getProxyAgent(true, "http://user:pass@1.2.3.4:12345", 10000)
}, (res) => {
    if (res.statusCode != 200) {
        console.log("HTTP error: " + res.statusCode);
    }
    
    res.on('data', (chunk) => {
        console.log(chunk.toString('utf8'));
    });
}).on('error', (err) => {
    console.log(err);
});
```

### Http 客户端

[参见这里的类型.](https://github.com/DoctorMcKay/node-stdlib/blob/master/src/lib/http/client/types.ts)

```js
import {HttpClient, HttpClientOptions, HttpRequestOptions, HttpResponse} from '@doctormckay/stdlib/http';

let client = new HttpClient({
    defaultHeaders: {'user-agent': 'my super cool app'},
    cookieJar: true
});

let response = await client.request({
    method: 'GET',
    url: 'https://tools.learningcontainer.com/sample-json.json'
});

console.log(response.statusCode);
console.log(response.jsonBody);
```

# IPv4 请检查url=值 (帮助)

```js
const {Ipv4} = require('@doctormckay/stdlib');
```

### inttoString( ip) 键盘 (单位)

-   `ipInt` - 整数格式的 Ipv4 地址

返回输入 IP 地址的点- 十进制字符串代表 .

### 字符串输入( ipString)

-   `ipString` - 一个点- 十进制字符串格式 Ipv4 地址

返回输入 IP 地址的32 位无符号的整数表示.

# 对象

```js
const {Objects} = require('@doctormckay/stdlib');
```

### 克隆( obj)

-   `obj` - 克隆的某些价值(可能为任何类型)

克隆是一个值, 及其所有子对象.

### 深等分(obj1,obj2\[,严格\])

-   `obj1` - 第一件事比较
-   `obj2` - 第二点比较
-   `strict` -可选的 过 `true` 使用严格的平等检查(第1条)`===`) (中文(简体) ). 默认假.

检查两个值及其所有子对象是否相等,然后返回 `true` 或者说 `false`。 。 。 .

如果两个对象具有所有相同的属性,而每个相同的属性具有相同的价值,则这两个对象被认为是平等的. 除数组外,不考虑属性的顺序.

# 监督办

```js
const {OS} = require('@doctormckay/stdlib');
```

### 应用数据目录( 段落)

-   `params` - 一个物体
    -   `appName` - 包含你应用程序名称的字符串
    -   `appAuthor` - 包含您的应用程序作者/供应商名称的字符串( 只用于 Windows )
    -   `useRoaming` -可选的. `true` 在 Windows 上使用漫游应用程序数据( 默认) `false`(中文(简体) )

返回包含路径的字符串,用于存储应用程序特定数据.

# 分析

```js
const {Parsing} = require('@doctormckay/stdlib');
```

### 命令Args(输入)

-   `input` - 输入字符串

解析一组命令式,无名的命令行参数,类似源引擎如何操作. 比方说 做它喜欢 `--arg=foo -pbar` 感觉就像 `one two "three three" four`。 。 。 .

更具体地说,参数在空格上被分割出来,但引文中的空格被解释为值的一部分. 引文,空格和后鞭可以被后鞭所逃脱. 参数之间的双空格崩溃,但 您可以用引用保留空值。 一些例子:

```
one two three                   => ["one", "two", "three"]
one two "three three" four      => ["one", "two", "three three", "four"]
one two  three four             => ["one", "two", "three", "four"]
one two "" four five            => ["one", "two", "", "four", "five"]
one two\ two three four         => ["one", "two two", "three", "four"]
```

# 承诺

```js
const {Promises} = require('@doctormckay/stdlib');
```

### 承诺( 超时, 执行者)

-   `timeout` - 超时数毫秒。 如果该值为 QQ 0,则超时功能被禁用.
-   `executor` - 以签名执行承诺的操作 `(resolve, reject)`

创建并返回一个在指定超时后自动拒绝的许诺, 如果该许诺尚未解决 .

如果承诺无效,那就以 `Error` 有信件的对象 `Request timed out`。 。 。 .

### callback 保证( callbackArgs, callback, \[是可选的,\] 执行器)

-   `callbackArgs` - 一系列字符串,说明调用中参数的名称和顺序. `null` 以传递整个承诺结果对象
-   `callback` - 召回功能,如果没有,则变质
-   `isOptional` - 说明回调是否可选。 如果不是,那么被拒绝的承诺将会崩溃(最终)应用. 默认 `false`。 。 。 .
-   `executor` - 以签名执行承诺的操作 `(resolve, reject)`

创造并返回一个承诺,也可用于发射回调,既支持承诺,又支持回调.

### 超时调用Callback Promitise(超时调用,调用BallbackArgs,调用Ballback,\[是可选的,\]执行器)

-   `timeout` - 超时数毫秒。 如果该值为 QQ 0,则超时功能被禁用.
-   `callbackArgs` - 一系列字符串,说明调用中参数的名称和顺序. `null` 以传递整个承诺结果对象
-   `callback` - 召回功能,如果没有,则变质
-   `isOptional` - 说明回调是否可选。 如果不是,那么被拒绝的承诺将会崩溃(最终)应用. 默认 `false`。 。 。 .
-   `executor` - 以签名执行承诺的操作 `(resolve, reject)`

创建并返回具有两者属性的许诺 `timeoutPromise` 财务报告和审定财务报表 `callbackPromise`。 。 。 .

### 睡眠 Async( 睡眠马里秒)

-   `sleepMilliseconds` - 时间,以毫秒计, 之后的承诺应该解决

返回指定延迟后解决的承诺.

# 渲染

```js
const {Rendering} = require('@doctormckay/stdlib');
```

### 进度栏( 值、 最大值、 宽度、 显示百分比)

-   `value` - 作为数字的进度栏的当前值
-   `maxValue` - 进步栏的最大值,作为数字
-   `barWidth` - 字符栏的宽度,包括方括号
-   `showPercentage` - 通过 `true` 以显示条在其中心位置的当前百分比(默认) `false`(中文(简体) )

返回包含 ASCII 进度栏的字符串。 在使用时取得最佳结果 `showPercentage`, (中文(简体) ), `barWidth` 应该是 一个奇数.

# 时间

```js
const {Time} = require('@doctormckay/stdlib');
```

### 时间戳

以格式返回含有本地时区当前24小时时间的字符串 `YYYY-MM-DD HH:MM:SS`。 。 。 .

# 单位

```js
const {Units} = require('@doctormckay/stdlib');
```

### 人可读Bytes(字节\[, 二进制\])

-   `bytes` - 字节数
-   `binary` - 通过 `true` 如果您想要使用基础-1024系统(即MiB而不是MB). 默认 `false`

返回输入字节数的可读字符串表示,例如12.5 MB.

## 常见问题

### @doctormckay/stdlib 是什么？

在Node\.js,我发现通常有用的“标准库”

### 如何安装 @doctormckay/stdlib？

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

### @doctormckay/stdlib 支持 TypeScript 吗？

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

### @doctormckay/stdlib 支持 ESM 还是 CommonJS？

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

### @doctormckay/stdlib 需要什么版本的 Node\.js？

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

### @doctormckay/stdlib 可以商用吗？

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

### @doctormckay/stdlib 的下载量有多少？

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

### @doctormckay/stdlib 还在维护吗？

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

