【问题标题】:How to parse commandline args with yargs in typescript如何在打字稿中使用 yargs 解析命令行参数
【发布时间】:2017-07-13 10:09:19
【问题描述】:

这是我尝试过的(代码改编自 yargs github 自述文件中的示例代码):

// main.ts

import {Argv} from "yargs";


console.info(`CLI starter.`);

function serve(port: string) {
    console.info(`Serve on port ${port}.`);
}

require('yargs')
    .command('serve', "Start the server.", (yargs: Argv) => {
        yargs.option('port', {
            describe: "Port to bind on",
            default: "5000",
        }).option('verbose', {
            alias: 'v',
            default: false,
        })
    }, (args: any) => {
        if (args.verbose) {
            console.info("Starting the server...");
        }
        serve(args.port);
    }).argv;

结果:

npm run-script build; node build/main.js --port=432 --verbose

> typescript-cli-starter@0.0.1 build /Users/kaiyin/WebstormProjects/typescript-cli-starter
> tsc -p .

CLI starter.

看起来 yargs 在这里没有效果。

知道如何让它工作吗?

【问题讨论】:

标签: node.js typescript yargs


【解决方案1】:

我改编了 yargs github 自述文件中示例的代码,结果证明这并不是一个完整的示例。 ¯_(ツ)_/¯

无论如何,我想出了办法:

#!/usr/bin/env node

import yargs, {Argv} from "yargs";

let argv = yargs
    .command('serve', "Start the server.", (yargs: Argv) => {
        return yargs.option('port', {
            describe: "Port to bind on",
            default: "5000",
        }).option('verbose', {
            alias: 'v',
            default: false,
        })
    }).argv;

if (argv.verbose) {
    console.info("Verbose mode on.");
}

serve(argv.port);

function serve(port: string) {
    console.info(`Serve on port ${port}.`);
}

你可以在这里找到完整的typescript-cli-starter repo:https://github.com/kindlychung/typescript-cli-starter

【讨论】:

  • 您仍在导入 'yargs' 两次。考虑做let argv = yargs.command(...) ...
  • 是的,现在已修复。
  • 我测试了新版本的东西并相应地编辑了答案。使用* as yargs 形式的导入,我得到了错误cannot redefine property: default。 (在此处添加错误以防其他人在谷歌上搜索该错误和 yargs)。正确的做法是用import yargs from "yargs"导入yargs的默认导出。
【解决方案2】:

一个简约的例子

import * as yargs from 'yargs'

    let args = yargs
        .option('input', {
            alias: 'i',
            demand: true
        })
        .option('year', {
            alias: 'y',
            description: "Year number",
            demand: true
        }).argv;

    console.log(JSON.stringify(args));

【讨论】:

    猜你喜欢
    • 2018-03-17
    • 1970-01-01
    • 2011-04-27
    • 2021-11-05
    • 2010-09-16
    • 2010-09-26
    • 2014-12-18
    相关资源
    最近更新 更多