使用yargs设置命令行完成

时间:2015-08-27 19:57:01

标签: node.js command-line-arguments yargs

我正在使用节点JS创建一个脚本,并希望使用yargs启用异步命令行完成。

completion section of the yargs documentation说:“将生成的脚本连接到.bashrc或.bash_profile”

但我没有看到有关如何生成脚本的任何信息。

2 个答案:

答案 0 :(得分:5)

documentation并不完全清楚如何做到这一点,但我想出来了。

安装yargs

npm install -g yargs

创建脚本(例如 script.js

#! /usr/local/bin/node
var argv = require('yargs')
    .completion('completion', function(current, argv, done) {
        setTimeout(function() {
          done([
            'apple',
            'banana'
          ]);
        }, 500);
    })
    .argv;

保存脚本并设置权限

chmod +x script.js

在命令行上将命令名称(完成调用中的第一个参数)作为第一个参数传递给脚本。

./script.js completion

这将输出命令行完成块以添加到 .bashrc或.bash_profile

_yargs_completions()
{
    local cur_word args type_list

    cur_word="${COMP_WORDS[COMP_CWORD]}"
    args=$(printf "%s " "${COMP_WORDS[@]}")

    # ask yargs to generate completions.
    type_list=`./shan.js --get-yargs-completions $args`

    COMPREPLY=( $(compgen -W "${type_list}" -- ${cur_word}) )

    # if no match was found, fall back to filename completion
    if [ ${#COMPREPLY[@]} -eq 0 ]; then
      COMPREPLY=( $(compgen -f -- "${cur_word}" ) )
    fi

    return 0
}

答案 1 :(得分:0)

npm i yargs -g

yargs参数的完整列表:

yargs.command({
    command: 'Add',
    describe: 'Add an item',
    builder: {
        noteTitle: {            // first argument
            type: 'string',
            demandOption : true,
            describe: 'Note Title'
        },
        noteBody:                       // second argument
        {
            describe: 'Note body',      // description
            demandOption: true,         // optional param or not
            type: 'string'              // param type
        }
    },
    handler: function (e){
        console.log("New Note Title:" +  e.noteTitle);
        console.log("New Note Body:" +  e.noteBody);
    }
});

-运行它。.

>> node app.js Add --noteTitle='New Note' --noteBody='this is some extra text'