#!/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 패키지로 터미널에 색과 스타일 추가 가능