web-dev-qa-db-ja.com

タイプスクリプトのyargsでコマンドライン引数を解析する方法

これが私が試したものです(コードはyargs github readmeの例のコードを適応させました):

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

> [email protected] build /Users/kaiyin/WebstormProjects/TypeScript-cli-starter
> tsc -p .

CLI starter.

Yargsはここでは効果がないようです。

これを機能させる方法はありますか?

6
qed

Yargs github readmeの例のコードを適合させましたが、完全な例ではないことがわかりました。 ¯_(ツ)_ /¯

とにかく、私はそれを行う方法を考え出しました:

#!/usr/bin/env node

import * as yargs from 'yargs'
import {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リポジトリはここにあります: https://github.com/kindlychung/TypeScript-cli-starter

6
qed

最小限の例

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));
3
Andrey