# nopt 中文文档

规范地址：https://npmcn.com/package/nopt/

版本：10\.0\.1
npm 元数据更新时间：2026-09-09T20:11:07.140Z
中文译文更新时间：2026-11-05T15:38:10.909Z
软件包许可：ISC

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

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

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

- 包体积（解压后）：26.5 kB，7 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：^22\.22\.2 \|\| ^24\.15\.0 \|\| \>=26\.0\.0
- 运行依赖：1 个
- 首次发布：2011-03-30T03:23:55.464Z
- 最新版本发布：2026-06-04T14:35:33.859Z
- 近 30 天下载量：315676122（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：39（近 12 个月 2 个）

## 中文简介

选项解析节点,支持类型,简称等. 由npm使用.

## 安装

```sh
npm install nopt
```

也可以使用：`pnpm add nopt`、`yarn add nopt`、`bun add nopt`

## README

如果你想写一个选项解析器,并有它好,有 两种方法。 道而道而道之错.

错误的方法是坐下来写一个选项解析器 。 我们都做了 那个.

正确的方式是写一些复杂的可配置程序 选项,你达到极限 你的挫折只是试图 全部管理,然后用胶带溶液延后到看到 {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}最后拍出一张 很棒的选项解析器.

如果您想要写入选项解析器, 请不要写入选项解析器 . 写入软件包管理器或源控制系统或服务 重启器,或操作系统. 你可能不会有一个 如果你不放弃,你就是无情的 在你的拖延中,你勤奋, 你可能只是结束一个非常 不错的选项解析器.

## 用户

```javascript
// my-program.js
var nopt = require("nopt")
  , Stream = require("stream").Stream
  , path = require("path")
  , knownOpts = { "foo" : [String, null]
                , "bar" : [Stream, Number]
                , "baz" : path
                , "bloo" : [ "big", "medium", "small" ]
                , "flag" : Boolean
                , "pick" : Boolean
                , "many1" : [String, Array]
                , "many2" : [path, Array]
                }
  , shortHands = { "foofoo" : ["--foo", "Mr. Foo"]
                 , "b7" : ["--bar", "7"]
                 , "m" : ["--bloo", "medium"]
                 , "p" : ["--pick"]
                 , "f" : ["--flag"]
                 }
             // everything is optional.
             // knownOpts and shorthands default to {}
             // arg list defaults to process.argv
             // slice defaults to 2
  , parsed = nopt(knownOpts, shortHands, process.argv, 2)
console.log(parsed)
```

这将为以下任何一项提供支持:

```console
$ node my-program.js --foo "blerp" --no-flag
{ "foo" : "blerp", "flag" : false }

$ node my-program.js ---bar 7 --foo "Mr. Hand" --flag
{ bar: 7, foo: "Mr. Hand", flag: true }

$ node my-program.js --foo "blerp" -f -----p
{ foo: "blerp", flag: true, pick: true }

$ node my-program.js -fp --foofoo
{ foo: "Mr. Foo", flag: true, pick: true }

$ node my-program.js --foofoo -- -fp  # -- stops the flag parsing.
{ foo: "Mr. Foo", argv: { remain: ["-fp"] } }

$ node my-program.js --blatzk -fp # unknown opts are ok.
{ blatzk: true, flag: true, pick: true }

$ node my-program.js --blatzk=1000 -fp # but you need to use = if they have a value
{ blatzk: 1000, flag: true, pick: true }

$ node my-program.js --no-blatzk -fp # unless they start with "no-"
{ blatzk: false, flag: true, pick: true }

$ node my-program.js --baz b/a/z # known paths are resolved.
{ baz: "/Users/isaacs/b/a/z" }

# if Array is one of the types, then it can take many
# values, and will always be an array.  The other types provided
# specify what types are allowed in the list.

$ node my-program.js --many1 5 --many1 null --many1 foo
{ many1: ["5", "null", "foo"] }

$ node my-program.js --many2 foo --many2 bar
{ many2: ["/path/to/foo", "path/to/bar"] }
```

阅读底部的测试 `lib/nopt.js` 更多实例 这只小狗能做什么.

## 类型

支持以下类型,并按以下 `nopt.typeDefs`

-   字符串:一个普通字符串. 没有解析完成.
-   路径:文件系统路径。 如果不是绝对的 Cwd , 则解决.
-   url:一个url. 如果它不分析,它不被接受.
-   数字:必须是数字.
-   日期: 必须分析为日期 。 如果有的话 `Date` 是一个选择, 然后返回日期对象,而不是字符串.
-   布尔: 必须是两个 `true` 或者说 `false`如果一个选项是一个布尔, 那么它就不需要价值了 它的存在将意味着 `true` 作为 这个值。 要否定布尔旗帜,做 `--no-whatever` 或者说 `--whatever false`
-   NaN:表示严格不允许选择. 任何值都会 失败.
-   Stream:一个与节点"Stream"类相匹配的对象. 珍贵 用于程序验证。 (npm用这个让你 提供任何在 `outfd` 财务报告和审定财务报表 `logfd` 配置选项。 )
-   矩阵: 如果 `Array` 指定为类型之一,然后是数值 将解析为选项列表。 这意味着多重价值 可指定值,并且该值将始终是一个数组.

如果一个类型是本列表中未列出的数组,那么这些就是 视为有效的数值。 例如,在上述例子中 `--bloo` 选项只能是 `"big"`, (中文(简体) ), `"medium"`,或 `"small"`, (中文(简体) ), 任何价值都会被否决.

当解析未知的字段时, `"true"`, (中文(简体) ), `"false"`,以及 `"null"` 将会是 被解释为他们的JavaScript等同.

也可以在一个列表中混合类型和值,或者多个类型. 对于 实例 `{ blah: [Number, null] }` 可以设定一个值 数字或无效。 当订购类型时,这意味着 首选项,以及可用于正确解释的第一种类型 将使用该值.

要定义新类型,请添加到 `nopt.typeDefs`中每个项目 散列是具有 `type` 委员和 `validate` 方法。 这个 `type` 成员是匹配类型列表中的内容的对象。 这个 `validate` 方法是一个通过 `validate(data, key, val)`验证方法应指定 `data[key]` 改为有效 价值 `val` 如果可以正确处理,或返回布尔 `false` 如果它不能做到这一点.

您也可以打电话 `nopt.clean(data, types, typeDefs)` 清理一个 配置对象并删除其无效属性.

## 处理错误

您可以指定下列方法: `nopt` 用于通知无效、未知和扩展选项:

`nopt.invalidHandler(key, value, type, data)` - 当一个值对其选项无效时调用. `nopt.unknownHandler(key, next)` - 找到没有配置的选项时调用。 在某些情况下,命令行上的下一个选项会自行解析,而不是作为未知选项的一部分. 在这种情况下 `next` 将包含该选项. `nopt.abbrevHandler(short, long)` - 当一个选项通过缩略语自动翻译时调用.

你可以把这些设置到 `false` 或任由他们跳过通知.

## 简称

是的,他们得到了支持。 如果您定义了这样的选项 :

```javascript
{ "foolhardyelephants" : Boolean
, "pileofmonkeys" : Boolean }
```

这样就可以了:

```bash
node program.js --foolhar --pil
node program.js --no-f --pileofmon
# etc.
```

## 简称

Shortwands 是短长的选项名称的散列到片断的参数 他们扩张到.

如果多个单一特征的短指组合起来 组合并没有明确匹配任何其他选项或简称, 然后,他们将被分成若干部分。 例如:

```json
{ "s" : ["--loglevel", "silent"]
, "g" : "--global"
, "f" : "--force"
, "p" : "--parseable"
, "l" : "--long"
}
```

```bash
npm ls -sgflp
# just like doing this:
npm ls --loglevel silent --global --force --long --parseable
```

## 其余的坐标

由 nopt 返回的配置对象被赋予一个特殊成员,叫做 `argv`,它是一个具有以下字段的天体:

-   `remain`: 在所有解析完成后剩下的参数 .
-   `original`:最初出现的rg.
-   `cooked`:后旗和快手后旗被扩展.

## 切开

节点程序的名称或多或少使用它出现的精确的 argv 在C地,在取出v8和节点特定选项之后. 因此, `argv[0]` 总是 `node` 财务报告和审定财务报表 `argv[1]` 总是 JavaScript 程序正在运行中 .

这通常对你没有多大用处. 所以他们被切掉 默认。 如果你想要的话,你可以进来了 `0` 作为最后一个 参数,或者您想切除的起始数字 名单.

## 常见问题

### nopt 是什么？

选项解析节点,支持类型,简称等\. 由npm使用\.

### 如何安装 nopt？

在项目目录运行 npm install nopt，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 nopt，可以用 npx nopt 直接运行。

### nopt 支持 TypeScript 吗？

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

### nopt 支持 ESM 还是 CommonJS？

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

### nopt 需要什么版本的 Node\.js？

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

### nopt 可以商用吗？

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

### nopt 的下载量有多少？

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

### nopt 还在维护吗？

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

