具有可选+可变参数的 Node.js 命令

2024-03-15

请帮我获取节点的commander按照我想要的方式解析参数的模块。

我正在寻找将文件列表上传到指定数据库。有一个默认的数据库名称,因此用户不应该need包含数据库参数。

我希望这个命令按如下方式工作:

>>> ./upload.js --db ReallyCoolDB /files/uploadMe1.txt /files/uploadMe2.txt
(uploads "uploadMe1.txt" and "uploadMe2.txt" to database "ReallyCoolDB")

>>> ./upload.js /files/uploadMe1.txt /files/uploadMe2.txt
(uploads "uploadMe1.txt" and "uploadMe2.txt" to the default database)

>>> ./upload.js --db ReallyCoolDB
(returns an error; no files provided)

我怎样才能实现这个commander?我已经尝试了很多事情,目前我被这个不起作用的代码所困扰:

// upload.js:

#!/usr/bin/env node

var program = require('commander');
program
  .version('0.1.0')
  .description('Upload files to a database')
  .command('<path1> [morePaths...]')
  .option('-d, --db [dbName]', 'Optional name of db', null)
  .action(function(path1, morePaths) {
    
    // At this point I simply want:
    // 1) a String "dbName" var
    // 2) an Array "paths" containing all the paths the user provided
    var dbName = program.db || getDefaultDBName();
    var paths = [ path1 ].concat(morePaths || []);
    console.log(dbName, paths);
    
    // ... do the upload ...
    
  })
  .parse(process.argv);

当我尝试跑步时./upload.js,我没有输出!

如何使用 Commander 接受单个可选参数和非空字符串列表?

编辑:感谢 Rob Raisch 的回答,我已经解决了我的问题!解决方案是使用usage代替action,完成之后的所有工作program命令(而不是在action函数),与program.db and program.args,并手动确保program.args非空:

var program = require('commander');

program
    .version('0.1.0')
    .description('Upload files to a database')
    .usage('[options] <path1> [morePaths ...]') // This improves "--help" output
    .option('-d, --db [dbName]', 'Optional name of db', null)
    .parse(process.argv);

var dbName = program.db || getDefaultDBName();
var paths = program.args;

if (!paths.length) {
    console.log('Need to provide at least one path.');
    process.exit(1);
}

// Do the upload!

The 自述文件.md https://github.com/tj/commander.js/文件为commander命令行处理模块在第二段中回答了您的用例:

“使用 Commander 的选项是使用 .option() 方法定义的,也可作为选项的文档。下面的示例解析 process.argv 中的参数和选项,将剩余的参数保留为program.args未被选项消耗的数组。”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有可选+可变参数的 Node.js 命令 的相关文章

  • Express.js - 监听关闭

    我有一个使用 Express 的 Node js 应用程序 在该应用程序中 我有一个如下所示的块 const app require app const port process env PORT 8080 const server app
  • 节点项目的 Azure git 部署失败

    我正在尝试将我的项目部署到azure 它正在失败 这些是我采取的步骤 git init git config core longpaths true git add git commit m initial commit 所有这些都有效 我
  • 如何在 inversify 中注入异步依赖?

    我有 TypeScript 应用程序并且正在使用反转 http inversify io 对于国际奥委会 我有一个连接类 use strict import injectable from inversify import createCo
  • nodeJS exec 不适用于“cd”shell cmd

    var sys require sys exec require child process exec exec cd home ubuntu distro function err stdout stderr console log cd
  • NodeJS 在目录中递归地哈希文件

    我能够实现目录中的递归文件遍历 即探索目录中的所有子目录和文件 为此我使用了answer https stackoverflow com questions 5827612 node js fs readdir recursive dire
  • npm install 没有拉入 devDependency

    我有 npm v 1 2 32 当我跑步时 npm 安装 mongo migrate 它不安装 mongodb 这是一个 devDependency 我究竟做错了什么 虽然与这个问题没有直接关系 但有些人可能有兴趣知道如果环境变量NODE
  • Node.js + Socket.io + Windows 7 / 8?

    我一直在到处寻找 但似乎找不到解决方案 是否可以在 Windows 7 上的 Node js 上安装 Socket io 如果没有 是否有某种替代方案 或者您知道未来有任何 Windows 支持吗 通常使用 Node js 包管理器 但是我
  • keystonejs 模型中的动态类型选择

    我想在 adminUI 中使用一个组合框 其中包含来自 Web 服务的字段 我正在考虑使用预 查找 挂钩获取数据 然后覆盖模式中 受众 属性的选项属性 Schema Compliance add title type Types Text
  • http模块和express模块​​有什么区别?

    我正在学习 NodeJs http www tutorialspoint com nodejs http www tutorialspoint com nodejs 我无法理解使用 http 模块 get post 方法 与使用expres
  • 使用 mosca MQTT 的请求响应模式

    有没有办法使用 mosca MQTT 实现请求响应模式 以 检查客户端的回复 如果在预期时间内未收到预期回复 则重新发布 我相信这在 Mqtt 5 中是可能的 但截至目前 我必须使用 QoS 1 的 Mosca 代理 支持直到 Mqtt 3
  • 有没有办法将击键发送到节点中的终端?

    我特别想发送 ctrl l 清除终端 这样每次我测试脚本时终端都是干净的 如果您使用的是 Linux console log 033 2J 如果你使用的是 Windows 我认为这可行 将光标设置在 0 0 var util require
  • Node.js Async/Await 模块导出 [重复]

    这个问题在这里已经有答案了 我对模块创建有点陌生 想知道 module exports 并等待异步函数 例如 mongo connect 函数 完成并导出结果 在模块中使用 async await 正确定义了变量 但是当尝试通过要求模块来记
  • Nodejs Express 隐式中间件应用于所有路由?

    我想知道 Express 是否允许我创建一个默认调用的路由中间件 而无需我将其明确放置在 app get arg 列表中 NodeJS 新手 var data title blah So I want to include this in
  • 在社交媒体上分享 Reactjs 链接时,react-helmet 中的元标记不显示

    我有一个在客户端运行reactjs的项目 在后端运行nodejs express 我实现了react helmet来更新索引之外的路线的标题和元标记 例如 用户查看帖子 viewpost q POSTID 然后客户做了一个GET reque
  • 变量前面加双下划线

    我的节点代码中有以下代码片段 var fs require fs fs readdir dirname function err files console log files 为什么变量 dirname 有双下划线 我知道一个下划线是私有
  • npm 错误! cb.apply 不是函数

    我收到这个错误 npm ERR cb apply is not a function 在Linux中做的时候npm install虽然我的npm版本是6 9 0 我的节点版本是v12 18 3 如何解决这个问题 如果您共享的是 Window
  • Node.js:server.setTimeout、server.timeout 和 server.keepAliveTimeout 之间有什么区别

    官方文档是here https nodejs org api http html http server settimeout msecs callback server setTimeout 中没有提及有关服务下一个请求的信息 所以我认为
  • 错误:找不到模块“jasmine-core”

    我安装了以下内容进行测试 devDependencies jasmine core 2 4 1 karma 0 13 22 karma jasmine 0 3 7 karma phantomjs launcher 1 0 0 运行后karm
  • 无法使用 webpack 加载 Node 原生插件

    虽然我正在使用vue cli在生成 webpack 配置的示例代码中 没有任何特定于 vue 的内容 我像这样创建示例应用程序 vue init webpack webpack modules example 生成webpack base
  • 使用 Socket.IO 时如何访问会话标识符?

    我有一个聊天 我需要管理独特的连接 我四处搜寻 但我找到的解决方案似乎都已被弃用 那么 如何使用 Socket IO 获取套接字的会话 ID 我在用着Node js http en wikipedia org wiki Node js Ex

随机推荐

  • 为什么 spread() 方法在 Sequelize 中不起作用?

    我正在使用一个Sequelize for my node js应用程序 我用findOrCreate 方法创建新用户 如果不存在 据此docs http docs sequelizejs com manual tutorial models
  • 如何更改微调器背景颜色?

    如何更改微调器背景颜色 这种黑色来自风格 如何更改弹出窗口的样式颜色 我想将背景颜色更改为白色而不是黑色 我该如何改变 spinnner
  • 使用 Moose 时在构造时分配方法体的最佳方法是什么?

    我在用着Moose 具体来说MooseX Declare 创建一个迭代器对象 Iter其中有一个next前进状态并返回的方法0 or 1根据需要使用在while陈述 我遇到的问题是 根据构造参数之一的存在 next需要执行两组截然不同的操作
  • 如何将 jquery ui 与 Bower 一起使用?

    我正在尝试yeoman http yeoman io and bower http bower io 我使用以下命令创建了一个 yeoman webapp yo webapp 我想用jqueryui http jqueryui com 所以
  • 如何在组件绘制时创建“请稍候”Swing 对话框

    对于 Swing 来说仍然相对较新 但经过几个小时的搜索 我无法在网上找到答案 因此写了这篇文章 抱歉 如果已经回答但我忽略了它 我在 Swing 应用程序中使用 JFreeChart 有些图表相对较重 180k 数据点 并且 JFreeC
  • 使用javascript正则表达式验证日期的问题[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • React Js Es6 风格的三元运算符

    我正在尝试添加以下三元运算符以在我登录时显示我的按钮并且如果我不隐藏它 下面的内容不断向我抛出错误 img src this state photo alt style display display none 您提供给 style 属性的
  • Haskell:如何使运行外部命令的函数超时

    我在函数内调用外部程序 现在我想让这个函数超时 而不仅仅是外部程序 但是在函数超时之后 外部程序仍然在我的计算机上运行 我使用的是debian 直到它完成计算 之后它的线程仍然作为我的主程序的子线程保留在进程表中 直到主程序终止 这是两个最
  • 如何在现有网页Editor Palette中提供自定义组件

    我想在网页编辑器面板中添加一个名为 myHTMLComponent 的新自定义组件 因此 一旦用户使用 WPE 打开任何 html 页面 myHTMLComponentM 就应该出现在那里 我该如何做需要的事情 而且这个组件还需要相应地生成
  • 使用 PostgreSQL 配置 Keycloak

    我使用 JDBC 开发 Spring Boot Rest API 项目 数据库是 PostgreSQL 我用Keycloak添加了授权 我想使用用户联合 因为我想在 PostgreSQL 数据库中使用用户 我该如何使用它以及不使用用户联合的
  • awakeFromNib 没有在自定义单元类中被调用,因为 IBOutlet 为零

    我是 iOS 编程新手 我创建了一个 customcell 类 并且 awakefromnib 方法没有被调用 因为 IBOutlet 为零 这让我发疯 请帮忙 我使用故事板而不是 xib 我最近遇到了这个问题 这是由于错误注册单元造成的
  • 移动应用程序的后端服务器提供商[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的移动应用程序需要一个后端服务器 我需要能够编写服务器端逻辑 这样我就不需要下载整个数据库 我正在为
  • 指示浏览器缓存忽略某些 URL 参数

    我想要两个 iframe 它们在不同时间加载以映射到浏览器中的相同缓存值 服务器与此无关 基本上 有没有办法让 chrome firefox 等 缓存 api 在查找 src 时忽略某些参数 在本例中为 运行时 传递单独的参数或对运行时进行
  • iOS:故事板和侧菜单作为 facebook 应用程序 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何创建带有故事板和导航控制器的隐藏菜单 谢谢你 查看这个 Github 项目 ECSlidingViewController 这正是
  • 检查 Django 查询集过滤中字段列表的 is_null

    我已经使用此字段创建模型 field 1 field 2 field 3 field n 我想要filter这 k 个字段的所有对象 field 1 field 2 field k 这些对象中的 n 不是Null 我的错误答案 我确实认为我
  • 将枚举值的通用列表组合为单个值的 C# 方法

    我想通过一个IEnumerable
  • 如何获取 Sonata 管理包后端列出的图像

    我想在列表区域中列出我的图像缩略图 我不知道该怎么做 任何人都可以帮助我 我在后端得到了我的标题 我正在使用 Sonata adim 捆绑包并遵循其官方文档 这是我的 imageAdmin php namespace swaam Image
  • 在 R 中处理数字(十进制)日期?

    我有一些来自 Excel 的数字日期数据 gt df lt data frame c 42613 42612 42614 c 42614 61 42613 97 42612 12 gt names df lt c Closetime Ope
  • FormsAuthentication.Decrypt 在其中一台 Web 服务器中始终返回 null

    我有一个基于asp net 4 0的webform应用程序 部署到两个不同的服务器 Webform 应用程序只有一个 Default aspx 其代码如下 protected void Page Load object sender Eve
  • 具有可选+可变参数的 Node.js 命令

    请帮我获取节点的commander按照我想要的方式解析参数的模块 我正在寻找将文件列表上传到指定数据库 有一个默认的数据库名称 因此用户不应该need包含数据库参数 我希望这个命令按如下方式工作 gt gt gt upload js db