인프런 커뮤니티 질문&답변

도도(코딩루팡)님의 프로필 이미지

작성한 질문수

Node.js 교과서 - 기본부터 프로젝트 실습까지

commander 사용하기

질문입니다. CLI

작성

·

293

0

commander 사용에 애러가 나는데 도움좀 주실수 있나요??

#!/usr/bin/env node
const program = require("commander");

program.version("0.0.1", "-v, --version").usage("[options]");

program
  .command("template <type>")
  .usage("--name [name] --path [path]")
  .description("템플릿을 생성합니다.")
  .alias("tmpl")
  .option("-n, --name [name]", "파일명을 입력하세요.", "index")
  .option("-d, --directory [path]", "생성 경로를 입력하세요", ".")
  .action((type, options) => {
    console.log(type, options);
  });
program.command("*", { noHelp: true }).action(() => {
  console.log("해당 명령어를 찾을 수 없습니다.");
  program.help();
});

program.parse(process.argv);
C:\Users\Dos\Desktop\lecture\zerocho_node\node_cli\node_modules\commander\index.js:910
        this.emit('command:' + this.name(), operands, unknown);
                                    ^

TypeError: this.name is not a function
    at Command._parseCommand (C:\Users\Dos\Desktop\lecture\zerocho_node\node_cli\node_modules\commander\index.js:910:37)
    at Command._dispatchSubcommand (C:\Users\Dos\Desktop\lecture\zerocho_node\node_cli\node_modules\commander\index.js:860:18)
    at Command._parseCommand (C:\Users\Dos\Desktop\lecture\zerocho_node\node_cli\node_modules\commander\index.js:877:12)
    at Command.parse (C:\Users\Dos\Desktop\lecture\zerocho_node\node_cli\node_modules\commander\index.js:712:10)
    at Object.<anonymous> (C:\Users\Dos\Desktop\lecture\zerocho_node\node_cli\command.js:21:9)
    at Module._compile (internal/modules/cjs/loader.js:955:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
    at Module.load (internal/modules/cjs/loader.js:811:32)
    at Function.Module._load (internal/modules/cjs/loader.js:723:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)

답변 8

0

확인했습니다 책 잘 보고 있습니다 감사합니다 :)

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

https://github.com/ZeroCho/nodejs-book/tree/revised/ch14

제 개정판 코드 참고하시면 될 것 같습니다. triggered = true도 제거되었습니다.

0

추가적으로 commander현재 버전을 받으면 책에서 inquirer를 사용해서 cli만 쳐서 inquirer를 실행시키는 부분도 되지 않습니다. 커맨드가 없으면 자동으로 help를 실행시키도록 해놓았네요. github에서 활용된 버전으로 사용하면 문제없이 돌아갑니다

npm홈페이지에서 보면 program.help를 실행하면 실행 뒤 자동으로 exit한다고 나오고, program.help뒤에 console.log를 넣어봐도 출력이 안되는 것으로 봐서 바로 종료되는것 같은데 이러면 triggered = true를 빼도 되지 않나요?

program.command("*", { noHelp: true }).action(() => {
  console.log("해당 명령어를 찾을 수 없습니다");
  program.help();
});

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네네 커맨더의 버전 업그레이드로 인해서 name 옵션을 더 이상 사용하면 안 됩니다.

0

option에서 name이라는 인자를 사용한게 충돌한거 같은 느낌입니다. 저도 코드를 뜯어본게 아니라 확신은 못하겠지만..

아래처럼 바꾸고 cli template html -d public/html -fn new으로 실행하니 해결됐습니다

.option("-fn, --filename <name>""파일명을 입력하세요""index")

0

같은에러가 지금 저도 발생하고 있네요

0

같은 에러입니다. 


조현영님 github
https://github.com/ZeroCho/nodejs-book/blob/master/ch14/14.2/node-cli/command.js

코드 그대로 사용해도 같은 오류가 나네용

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

명령어를 뭘 치셨나요??