본문 바로가기
[IT] Node.JS

[Node.js] Node.js로 커맨드라인(CLI) 프로그램 만들기

by 오리엔탈킴 2022. 4. 12.

안녕하세요, 오늘은 Node.js를 활용해서 커맨드라인(CLI : Command Line Interface)에서 돌아가는 아주 간단한 애플리케이션을 작성해보도록 하겠습니다.

먼저 npm init을 통해 혹은 수동으로 package.json 파일을 생성해줍니다. 혹시 node 설치 및 프로젝트 설정방법이 필요하시면 아래 포스팅을 참고해주세요~

[[IT] Node.JS] - [Node.js 개발환경] Node.js 및 VS code 설치, Node.js 초기 프로젝트 생성 및 실행

 

package.json

{
  "name": "clitest",
  "version": "1.0.0",
  "main": "cli.js",
  "bin":{
    "clitest": "./cli.js"
  },
  "scripts": {
    "start": "node ./cli.js"
  }
}

 

여기서 중요한 것은 "bin" 속성인데, { "실행 명령어" : "실행 js 파일" } 을 작성하여, npm install -g을 통해 전역에 설치를 하였을 때, 실행을 할 수 있는 임의의 명령어와 그때 실행되는 파일명을 입력해줍니다.

나머지 값은 기본 프로젝트 정보이며, 필수 값은 아닙니다.

 

cli.js

package.json과 같은 폴더에 cli.js 파일을 생성한 후 아래와 같이 작성하였습니다.

 

#!/usr/bin/env node

(() => {

    console.log('\x1b[31m%s\x1b[0m', '[clitest Start] 시작합니다.');

    console.log('\x1b[32m%s\x1b[0m',"process.argv[0]: " + process.argv[0]);
    console.log('\x1b[33m%s\x1b[0m',"process.argv[1]: " + process.argv[1]);

    let result = Number(process.argv[2]) + Number(process.argv[3]);

    console.log('\x1b[34m%s\x1b[0m', '[Result] arg1 + arg2 = ', result);

})();

 

#!/usr/bin/env node : 맨 위의 주석으로 되어있는 부분은 윈도우 OS에서는 불필요하지만, 리눅스 등에서 CLI 프로그램에서 node 위치를 지정하기 위한 필수 문구입니다.

(() => {   })() : js 파일 실행 시 수행될 메서드를 정의하여 위와 같이 아주 간단하게 CLI 어플리케이션을 작성합니다.

process 모듈을 통해 실행 시 매개변수 2개를 입력 받아서 그 합을 출력해주는 프로그램입니다.
 
process.argv[2]부터 입력받는 매개변수입니다. 이 매개변수를 Number() 함수를 통해 숫자형태로 형변환을 하여 두 매개변수를 값을 출력을 하게 됩니다.

process.argv[0]을 출력해보면 node의 실행파일, process.argv[1]은 실행되는 js 파일임을 알 수 있습니다.

참고로 '\x1b[34m%s\x1b[0m'를 추가하여 콘솔로그의 글자색을 변경할 수 있습니다. (참고: https://gist.github.com/abritinthebay/d80eb99b2726c83feb0d97eab95206c4)

 

 

실행 및 결과

먼저 아래의 명령으로 작성한 CLI 프로그램 실행이 가능합니다. CMD 등 터미널에서 현재 프로젝트 위치로 이동하여, "node .\cli.js 매개변수1 매개변수2" 와 같이 입력하면 실행됩니다.

node .\cli.js 1 2

 

전역 설치를 통한 실행은 아래와 같습니다. 아래의 명령으로 전역 설치를 진행합니다.

npm i -g

 

위의 package.json의 bin에 작성한 명령어로 아래와 같이 실행합니다.

clitest 1 2

 

실행 결과로 아래와 같이 매개변수 1과 2의 합인 3이 콘솔 로그로 정상적으로 출력되는 것을 확인할 수 있습니다.

실행 결과
실행 결과

 

 

반응형

댓글