프로그래밍 언어/NODE JS

commander, inquirer 사용하기(1)

· 코딩마이데이

commander를 사용하여 예제 프로그램을 제작합니다. commander와 더불어 CLI 프로그램과 사용자 간의 상호작용을 돕는 inquirer 패키지, 콘솔 텍스트에 스타일을 추가하는 chalk 패키지도 함께 사용합니다.

commander와 inquirer, chalk을 설치합니다.

$ npm i commander@5 inquirer chalk

 

프로그램을 commander와 inquirer로 재작성할 것입니다. 먼저 commander 사용법부터 간단히 알아봅시다.

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

program.version("0.0.1", "-v, --version").name(cli);

program
  .command("template <type>")
  .usage("<type> --filename [filename] --path [path]")
  .description("템플릿을 생성합니다.")
  .alias("tmpl")
  .option("-f, --filename [filename]", "파일명을 입력하세요.", "index")
  .option("-d --directory [path]", "생성 경로를 입력하세요", ".")
  .action((type, options) => {
    console.log(type, options.filename, options.directory);
  });

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

program.parse(process.argv);

 

commander 패키지로부터 program 객체를 불러왔습니다. program 객체에는 다양한 메서드가 존재합니다. 하나씩 알아봅시다.

 

  • version: 프로그램의 버전을 설정할 수 있습니다. 첫 번째 인수로 버전을 넣어주고, 두 번째 인수로 버전을 보여줄 옵션을 넣습니다. 여러 개인 경우 쉼표(,)로 구분하면 됩니다. 현재 --version으로 지정되어 있고, -v는 축약 옵션입니다. node -v나 npm -v처럼 cli -v를 프로그램의 버전을 확인할 수 있습니다.
  • usage: 이 메서드를 사용하면 명령어의 사용법을 설정할 수 있습니다. 사용법은 명령 어에 도움 옵션(h 또는 -thelp)을 붙였을 때 나타나는 설명서에 표시됩니다. 설명서는 commander가 자동으로 생성합니다. [options)라고 되어 있는데, (J는 필수가 아닌 선택 이라는 뜻입니다. 즉, 옵션을 넣어도 되고 안 넣어도 됩니다.
  • name : 명령어의 이름을 넣습니다. cli를 적으면 됩니다.
  •  command: 명령어를 설정하는 메서드입니다. 현재 template 〈type>과 *라는 두 개의 명령어 를 설정했습니다. 따라서 c11 template html과 같이 명령할 수 있게 됩니다. 이때 html이 〈type>에 대응됩니다. O는 필수라는 의미이므로 type을 넣지 않으면 에러가 발생합니다. * 는 와일드카드 명령어로, 나머지 모든 명령어를 의미합니다. template을 제외한 다른 명령 어를 입력했을 때 실행됩니다.
  • description: 명령어에 대한 설명을 설정하는 메서드입니다. 역시 명령어 설명서에 표시됩 니다.
  •  alias: 명령어의 별칭을 설정할 수 있습니다. tempLate 명령어의 별칭이 tmp」로 설정되어 있으므로 1l template html 대신 cL1 tmpl html로 명령어를 실행할 수 있습니다.
  • option: 명령어에 대한 부가적인 옵션을 설정할 수 있습니다. template 명령어 같은 경우에 는 파일명(--filename)과 생성 경로(-directory)를 옵션으로 가집니다. 이 메서드의 첫 번 째 인수가 옵션 명령어고, 두 번째 인수가 옵션에 대한 설명입니다. 마지막 인수는 옵션 기 본값입니다. 옵션을 입력하지 않았을 경우 자동으로 기본값이 적용됩니다. 옵션 이름으로 name은 위의 name 메서드와 충돌할 위험이 있으니 사용하지 않는 것이 좋습니다.
  • requiredoption: option과 같은 역할을 하지만 필수로 입력해야 하는 옵션을 지정할 때 사 용합니다. 예제에서는 사용하지 않았습니다.
  • action : 명령어에 대한 실제 동작을 정의하는 메서드입니다. <type> 같은 필수 요소나 옵션 들을 매개변수로 가져올 수 있습니다.
  • help: 설명서를 보여주는 옵션입니다. h4 --help 옵션으로 설명서를 볼 수도 있지만, 이 메서드를 사용해 프로그래밍적으로 표시할 수도 있습니다.
  • parse: program 객체의 마지막에 붙이는 메서드입니다. process. argv를 인수로 받아서 명령 어와 옵션을 파싱합니다.

이 메서드들을 조합해서 예제 코드처럼 명령어를 만들면 됩니다.

package.json의 bin 속성에 새로 만든 파일을 연결하고 다시 전역 설치합니다.

 

package.json

{
  "name": "node-cli",
  "version": "0.0.1",
  "description": "nodejs cli program",
  "main": "index.js",
  "author": "ZeroCho",
  "license": "ISC",
  "bin": {
    "cli": "./command.js"
  },
  "dependencies": {
    "chalk": "^5.6.2",
    "commander": "^5.1.0",
    "inquirer": "^13.3.2"
  }
}

 

콘솔

$ npm i -g