회사에서 신규 프로그램에 사용할 데이터를 자동으로 가공하는 프로그램을 만들고 있습니다. Node 기반으로 프로그램을 작성하고 있는데, cli를 이용하여 입력 값을 받아 동작하도록 구현했습니다.
이를 구현하기 위해 commander.js를 사용했습니다. 제가 사용한 방법 위주로 정리해보도록 하겠습니다.
commander.js를 사용하기 위해서는 아래와 같이 패키지를 설치해야합니다.
$ npm install --save commander
Option
일반적인 Option을 정의합니다. 옵션의 데이터가 올 수 도 있고, 옵션만 사용할 수도 있습니다.
app.js 를 아래와 같이 작성합니다.
const { Command } = require('commander');
const program = new Command();
program
.option('-n, --name <name>', 'file name')
.option('-c, --compress', 'compress')
.parse();
console.log(program.opts().n);
console.log(program.opts().name);
console.log(program.opts().compress);
작성이 완료되었으면 아래 명령어를 이용하여 테스트 해보도록겠습니다.
$ node app.js -n 'a.txt'
$ node app.js --name 'a.txt' -c
결과는 아래와 같습니다.
$ node app.js -n 'a.txt'
undefined
a.txt
undefined
$ node app.js --name 'a.txt'
undefined
a.txt
true
-n 또는 --name 으로 데이터를 입력 받을 수 있고, 내부에서 참조할 땐, name으로 참조해야합니다. option을 사용하고 데이터를 전달하지 않으면 true 값을 반환하게 됩니다.
이렇게 option을 정의했다면, -h, --help를 이용하여 help를 볼 수도 있습니다.
$ node app.js -h
Usage: app [options]
Options:
-n, --name <name> file name
-c, --compress compress
-h, --help display help for command
option 함수를 이용하여 정의한대로 잘 나오는 것을 확인할 수 있습니다.
Default Value
옵션에 사용할 기본 값도 정의할 수 있습니다. 해당 옵션을 사용하지 않으면 기본 값으로 할당되게 됩니다.
options 메서드의 세번째 인자로 기본 값을 설정합니다. name의 기본값은 'default file name'으로 compress의 기본값은 false로 설정했습니다.
const { Command } = require('commander');
const program = new Command();
program
.option('-n, --name <name>', 'file name', 'default file name')
.option('-c, --compress', 'compress', false)
.parse();
console.log(program.opts().name);
console.log(program.opts().compress);
그럼 실행해보겠습니다.
$ node app.js
default file name
false
옵션을 지정하지 않았지만 문제없이 출력되는 것을 확인할 수 있습니다.
Required option
필수 옵션을 지정할 수 있습니다. name을 필수 옵션으로 지정해보도록 하겠습니다. option 메서드 대신 requiredOption 메서드를 사용하면 됩니다. 기본값도 제거 했습니다.
const { Command } = require('commander');
const program = new Command();
program
.requiredOption('-n, --name <name>', 'file name')
.option('-c, --compress', 'compress', false)
.parse();
console.log(program.opts().name);
console.log(program.opts().compress);
실행 결과는 아래와 같습니다.
$ node app.js
error: required option '-n, --name <name>' not specified
name 옵션이 입력되지 않아 error를 발생시키며 프로그램이 종료된 것을 확인할 수 있습니다.
Version
마지막으로 프로그램의 버전을 확인하는 version 메서드를 추가해보겠습니다. 저는 package.json에 있는 옵션을 사용하여 출력했습니다.
const { Command } = require('commander');
const packageJson = require('./package.json');
const program = new Command();
program
.requiredOption('-n, --name <name>', 'file name')
.option('-c, --compress', 'compress', false)
.version(packageJson.version)
.parse();
console.log(program.opts().name);
console.log(program.opts().compress);
버전을 출력하기 위해 -V 혹은 --version 옵션을 사용할 수 있습니다.
$ node app.js --version
1.0.0
잘 출력된 것을 확인 할 수 있습니다.
소스는 아래 링크에서 확인 가능합니다.
'JavaScript' 카테고리의 다른 글
[Node.js] 노드 서버에서 브라우저 화면 캡처하기(puppeteer) (0) | 2021.07.09 |
---|---|
[JavaScript] 다각형의 무게 중심(Centroid) 구하기 (0) | 2021.02.22 |
[Node.js] ReferenceError: primordials is not defined (0) | 2021.02.09 |
[JavaScript] setTimeout의 delay는 음수도 가능할까? (0) | 2021.01.21 |
[JavaScript/Pseudoclassical/ES5] Subclass method에서 Superclass Method 호출하기(오버라이딩 메서드 호출) (0) | 2021.01.20 |