nopt

中文文档
10.0.1发布于 2026/06/04ISCCommonJS构建来源已验证近 30 天下载 3.2亿

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

中文使用文档
文档目录7 节
  1. 用户
  2. 类型
  3. 处理错误
  4. 简称
  5. 简称
  6. 其余的坐标
  7. 切开

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

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

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

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

用户

// 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)

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

$ 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 或任由他们跳过通知.

简称

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

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

这样就可以了:

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

简称

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

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

{ "s" : ["--loglevel", "silent"]
, "g" : "--global"
, "f" : "--force"
, "p" : "--parseable"
, "l" : "--long"
}
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 共发布 39 个版本,首次发布于 2011/03/30;过去 12 个月发布了 2 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
10.0.1latest2026/06/045 个月前
10.0.02026/05/165 个月前
9.0.02025/10/221 年前
8.1.02025/01/221.8 年前
8.0.02024/09/052 年前
7.2.12024/05/042 年前

关于 nopt 的常见问题

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 和提交记录判断。