我想用节点和节点命令创建一个脚本,当我尝试获取我的args的值时,我得到值true而不是值本身.
例如,如果我在终端写这个:
node myfile.js -s somefile -d test
var program = require('commander');
program
.version('0.0.1')
.option('-s, --src', 'src csv file')
.option('-d, --destination', 'destination csv file')
.parse(process.argv);
console.log(program.src); // return true
console.log(program.destination); // return true
Run Code Online (Sandbox Code Playgroud)
我如何获得这个args的价值?
我正在使用commander.js包来解析命令行参数:我想使一个标志非可选,API和git repo中的测试松散地提到需要一个标志,但我通常需要被击中头部有说明.
它实际上是否可能,如果不满足要求,脚本会抛出吗?
required-field command-line-arguments node.js node-commander
我尝试在打字稿中使用指挥官,我想为我的 cli 提供正确的类型。所以我从这段代码开始:
import * as program from "commander";
const cli = program
.version("1.0.0")
.usage("[options]")
.option("-d, --debug", "activate more debug messages. Can be set by env var DEBUG.", false)
.parse(process.argv);
console.log(cli.debug)
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
example.ts(9,17): error TS2339: Property 'debug' does not exist on type 'Command'.
Run Code Online (Sandbox Code Playgroud)
所以我尝试添加一个接口,如此处所述:
import * as program from "commander";
interface InterfaceCLI extends commander.Command {
debug?: boolean;
}
const cli: InterfaceCLI = program
.version("1.0.0")
.usage("[options]")
.option("-d, --debug", "activate more debug messages. Can be set by env var DEBUG.", …Run Code Online (Sandbox Code Playgroud) 我把头靠在墙上,试图让节点的commander模块按照我想要的方式解析参数。
我希望将文件列表上传到命名数据库。有一个默认的数据库名称,因此用户不需要包含数据库参数。
我希望此命令按以下方式工作:
>>> ./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)
Run Code Online (Sandbox Code Playgroud)
我该如何实现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: …Run Code Online (Sandbox Code Playgroud) 我有以下代码
export const program = new Command();
program.version('0.0.1');
program
.command('groups')
.command('create')
.action(() => console.log('creating'))
.command('delete')
.action(() => console.log('deleting-all'))
program.parse(process.argv)
Run Code Online (Sandbox Code Playgroud)
我想要实现的目标是
groups create和groups delete
然而,删除的代码链接到创建。它识别groups createand groups create delete(我不想要)但不识别groups delete
我正在使用commander.js编写一个与API交互的简单node.js程序.所有调用都需要使用子命令.例如:
apicommand get
Run Code Online (Sandbox Code Playgroud)
被称如下:
program
.version('1.0.0')
.command('get [accountId]')
.description('retrieves account info for the specified account')
.option('-v, --verbose', 'display extended logging information')
.action(getAccount);
Run Code Online (Sandbox Code Playgroud)
我现在要做的是在apicommand没有任何子命令的情况下调用时显示默认消息.就像git没有子命令时调用一样:
MacBook-Air:Desktop username$ git
usage: git [--version] [--help] [-C <path>] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
These are common Git commands used in various situations:
start a working area (see also: git help tutorial)
clone Clone a repository into a …Run Code Online (Sandbox Code Playgroud) commander.js我使用Node.js 平台构建了简单的命令行应用程序。现在我想将其编译为简单exe文件,我可以直接执行。
意味着我想要单个可执行文件来完成完整的应用程序
这是我的应用程序结构
APP_ROOT
| - package.json
| - node_modules
| - node_modules/.bin/myapp.bat
| - node_modules/myapp/bin/myapp
| - node_modules/myapp/bin/myapp-action1
| - node_modules/myapp/bin/myapp-action2
Run Code Online (Sandbox Code Playgroud)
谢谢
如何创建箭头键菜单列表?
输入eslint init或后我正在寻找类似的东西create-react-app <project>吗?(参见下图)


到处寻找创建CLI的方法,我发现NodeJS是一个可选选项,后面是一些工具:Commander.js,Vorpal和/或create-new-cli。
如果我走的路正确,如何创建CLI箭头键选择菜单?
我正在使用commander.js来解析命令行参数,我试图收集一个可以多次出现的可选参数,它总是返回我设置的选项和默认选项。
function collect (val, memo) {
memo.push(val);
return memo;
}
program
.command('run <param>')
.action(function run(param, options) {
console.log(param);
console.log(options.parent.config);
});
program
.option('-c, --config <path>', 'Config', collect, ["/path/to/default"])
.parse(process.argv);
Run Code Online (Sandbox Code Playgroud)
当我这样调用脚本时:
index.js run some -c "/some/path" -c "/other/path"
Run Code Online (Sandbox Code Playgroud)
它打印:
[ '/path/to/default', '/some/path', '/other/path' ]
Run Code Online (Sandbox Code Playgroud)
但它应该只打印:
['/some/path', '/other/path' ]`
Run Code Online (Sandbox Code Playgroud)
当我在没有-c参数的情况下调用它时,它可以正常工作,使用默认值打印数组。我怎样才能解决这个问题?
我是指挥官的新手,我正在尝试实现这样的命令树:
|- build
| |- browser (+ options)
| |- cordova (+ options)
| |- no subcommands, just options
|- config
| |- create (+ options)
Run Code Online (Sandbox Code Playgroud)
是否可以将这些命令拆分成多个文件,例如有点像这样:
中央档案:
|- build
| |- browser (+ options)
| |- cordova (+ options)
| |- no subcommands, just options
|- config
| |- create (+ options)
Run Code Online (Sandbox Code Playgroud)
构建命令的文件:
program.command('browser').description(...);
program.command('cordova').description(...);
program.option(...);
Run Code Online (Sandbox Code Playgroud)
配置命令的文件:
program.command('create').description(...);
Run Code Online (Sandbox Code Playgroud)
我知道 Git 风格的子命令,但这些似乎需要可执行文件(我只有常规的 JS 文件)
所以,我有这个 NestJS 项目,出于学习目的,我想使用Nest-commander创建一个可以在终端上执行的命令(这样我可以从其他服务调用函数),也出于学习目的,每当我调用它时命令,它应该调用服务文件上的函数,从数据库中获取用户。
它看起来像这样:
> run myCommand -username UsernameString
Run Code Online (Sandbox Code Playgroud)
每当从终端调用该命令时,我都会调用getUser()fromAnotherService来查找具有特定 UsernameString 的用户。我阅读了文档,但无法理解其中的内容,所以......
node-commander ×11
node.js ×11
javascript ×5
typescript ×2
command ×1
command-line ×1
nestjs ×1
vorpal.js ×1
windows ×1