2017-11-15 1 views
1

위치 인수를 올바르게 구성하는 방법을 찾을 수 없습니다. 이 코드가 있습니다Yargs - 생략 된 위치 인수에 대한 사용자 정의 오류 메시지 제공 방법

#!/usr/bin/env node 

const create = (argv) => { 
    console.log('create component with name:', argv.name) 
} 

const createBuilder = (yargs) => { 
    yargs.positional('name', { 
    desc: 'Name of the new component', 
    }) 
} 

/* eslint-disable no-unused-expressions */ 
require('yargs') 
    .command({ 
    command: 'create <name>', 
    desc: 'Create a new component', 
    builder: createBuilder, 
    handler: create, 
    }) 
    .demandCommand(1, 'A command is required') 
    .help() 
    .argv 

을 나는 사용자가 생성 명령 다음에 이름을 지정하지 않는 경우 사용자 지정 오류 메시지를 제공하고 싶습니다. 내가 대신 demandCommand 및 demandOption ( 의 각을 사용하는 것이 좋습니다

:

그것은 그렇게하는 방법을 문서에서 나에게 분명하지 않다, 그리고 github의 문제를 겪고있는 동안 나는이 댓글 (# 928)을 가로 질러왔다 이는 문서화되어있다).

이 별도로

내가

.demandCommand(1, 'You need to provide name for the new component') 

또는

.demandOption('name', 'You need to provide name for the new component') 

하지만 운이없는

와 조합의 모든 종류의 시도했습니다 당신은 위치 인수와 플래그 인수를 구성 할 수 있습니다. 아무도 이것을하는 방법을 아는가?

답변

0

yargs의 명령 옵션은 두 가지 유형의 인수를 취할 수 있습니다.

첫 번째는 필수 : <varName>입니다. 어떤 이유로 사용자가 varName을 입력하지 않고 명령을 입력하면 도움말 페이지가 실행됩니다.

두 번째 것은 입니다. 선택 사항 : [varName]입니다. 사용자가 varName이 누락 된 경우에도 명령을 입력하면 명령이 실행됩니다.

추가 : 무한한 varName 변수를 원할 경우 옵션에 대해 spread operator을 제공 할 수 있습니다. <...varNames> 또는


[...varNames] 인하면 사용자 지정 오류 메시지를 제공하려는 경우, 그것에 대해가는 몇 가지 방법이 있습니다 말했다되고. 첫 번째는 이것이다 :

const program = require('yargs') 
    .command('create [fileName]', 'your description',() => {}, argv => { 
     if(argv.fileName === undefined) { 
      console.error('You need to provide name for the new component') 
      return; 
     } 
     console.log(`success, a component called ${argv.fileName} got created.`) 
    }) 

Lodash는 또한 일 것 function _.isUndefined을 제공합니다.


두번째 이것이다

const program = require('yargs') 
    .command('create <fileName>', 'A description',() => {}, argv => { 

    }).fail((msg, err, yargs) => { 
     console.log('Sorry, no component name was given.') 
    }) 

program.argv 

자세한 내용은 여기 yargs API에 fail documentation이다.

+0

감사합니다.하지만 yargs API를 사용하는 솔루션보다 해결 방법이 더 많습니다. 필자가 보는 문제는 -h가 다음과 같이 표시된다는 것입니다 :'create [fileName] create new component' fileName을 선택 사항으로 표시하고 통신하고 싶습니다. – devboell

+0

두 번째 예제 * 문제가 해결 되었습니까? – Ovior

+0

사실, 여전히 'undefined'라는 핸들러를 호출 할 것이기 때문에이를 처리해야 할 것입니다. 또한 다른 오류로 인해'fail'이 호출 될 수 있는지 알지 못하므로 코드를 추가해야합니다. 또한 console.log/error를 통한 사용자 피드백은'demandCommand' 및'demandOption'에 의해 반환 된 메시지와 일치하지 않습니다. 'demandPositional'과 같은 것을 기대하고 있었는데 ... github에서 문제를 열어 볼 수 있습니다. 그래도 도움을 주셔서 감사합니다! – devboell

관련 문제