CLI 프로그램

ClassBinu·2024년 4월 6일

Node.js 교과서

목록 보기
17/19
#!/usr/bin/env node
console.log("Hello, world!");

주석의 의미!

shebang(hashbang) 라인
unix 기반에서 스크립트 파일 실행할 때 사용되는 인터프리터를 지정

#!: Shebang시작을 나타내는 특수 문자 시퀀스
/usr/bin/env: 'env' 프로그램 경로. env는 환경변수를 이용해 프로그램을 실행하는 unix 명령어임.
즉, node를 env를 통해 위치를 찾아서 실행하는 것

// package.js에 이거 추가
  "bin": {
    "cli": "./index.js"
  }
// index.js
#!/usr/bin/env node
const readline = require("readline");


// 데이터 입력, 출력 소스를 지정. 기본적으로 표준 입출력
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.question("1+1=? ", (answer) => {
  if (answer === "2") {
    console.log("Correct!");
  } else {
    console.log("Wrong!");
  }
  rl.close();
});

전역 설치 후 npx 패키지명으로 실행 가능

라이브러리

직접 cli구현할 수 있지만 yargs, commander, meow 등 라이브러리가 있음.
직관적인건 commander

inquirer를 사용하면 상호작용하는 기능을 쉽게 구현 가능

const inquirer = require('inquirer');

inquirer
  .prompt([
    {
      type: 'input',
      name: 'name',
      message: 'What\'s your name?',
    },
    {
      type: 'list',
      name: 'choice',
      message: 'Choose one option:',
      choices: ['Option 1', 'Option 2', 'Option 3'],
    },
    {
      type: 'confirm',
      name: 'confirmation',
      message: 'Are you sure?',
    }
  ])
  .then(answers => {
    console.log(`Hi ${answers.name}, you chose ${answers.choice}, confirmation: ${answers.confirmation}`);
  })
  .catch(error => {
    console.error('Error:', error);
  });

chalk 패키지로 터미널에 색과 스타일 추가 가능

0개의 댓글