CLI 프로그램 만들기
index.js 파일 제일 위에 #!/usr/bin/env node 를 적어 준다.
윈도우에서는 아무 역할이 없지만 리눅스나 맥에서는 이 파일을 노드로 실행하라는 역할을 한다.
#!/usr/bin/env node
console.log("hello cli");
package.json 파일에 bin 부분을 추가한다.
cli를 실행하면 index.js가 실행된다.
{
"name": "node-cli",
"version": "0.0.1",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"bin": {
"cli": "./index.js"
}
}
아래처럼 글로벌로 설치하면 index.js 가 프로그램을 설치가 된 것이다.
D:\code\node\cli>npm i -g
added 1 package in 1s
실행을 하면 console가 실행되는 것을 확인할 수 있다.
D:\code\node\cli>npx cli
hello cli
아래와 같이 코드를 수정했어도 다시 설치할 필요 없이 정상적으로 실행이 된다.
//index.js 파일
#!/usr/bin/env node
console.log("hello cli", process.argv);
D:\code\node\cli>npx cli
hello cli [
'C:\\Program Files\\nodejs\\node.exe',
'C:\\Users\\john\\AppData\\Local\\npm-cache\\_npx\\bc67c92c0f4afb79\\node_modules\\node-cli\\index.js'
]
process.argv 는 매개변수를 불러올 수 있다.
D:\code\node\cli>npx cli one two three four
hello cli [
'C:\\Program Files\\nodejs\\node.exe',
'C:\\Users\\john\\AppData\\Local\\npm-cache\\_npx\\bc67c92c0f4afb79\\node_modules\\node-cli\\index.js',
'one',
'two',
'three',
'four'
]
터미널에서 사용자의 답변을 듣는 코드를 작성하고 실행 화면이다.
// index.js 파일
#!/usr/bin/env node
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin, // 터미널 인풋
output: process.stdout, // 터미널 아웃풋
});
rl.question("예제가 재밌나요?(y/n)", (answer) => {
if (answer === "y") {
console.log("감사합니다.");
} else if (answer === "n") {
console.log("죄송합니다.");
} else {
console.log("y 또는 n 만 입력하세요.");
}
rl.close();
});
D:\code\node\cli>npx cli
예제가 재밌나요?(y/n)b
y 또는 n 만 입력하세요.
D:\code\node\cli>npx cli
예제가 재밌나요?(y/n)y
감사합니다.
D:\code\node\cli>npx cli
예제가 재밌나요?(y/n)n
죄송합니다.
아래와 같이 package.json 이 수정되면 다시 설치를 해줘야 한다.
cli : 이 부분이 index.js → template.js 로 변경
{
"name": "node-cli",
"version": "0.0.1",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"bin": {
"cli": "./template.js"
}
}
D:\code\node\cli>npm i -g
up to date in 831ms
template를 자동으로 만들어 주는 cli 프로그램을 수행한 결과 화면
자동으로 html 파일을 만들고 안에 내용을 채워진 것을 확인
설치한 npx cli를 지울 때는 아래 명령어 사용 가능
D:\code\node\cli>npm rm -g node-cli
Commander, Inquirer 사용하기
자주 쓰이는 패키지 2개를 알아보자.
버전에 따라서 명령어가 달라질 수 있어서 버전까지 지정해서 설치
D:\code\node\cli>npm i commander@9 inquirer@8
added 53 packages, and audited 54 packages in 7s
15 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
command.js 만들고 package.json 수정 필요, 다시 설치
// package.json 파일
"bin": {
"cli": "./command.js"
},
// 다시 설치
D:\code\node\cli>npm i -g
up to date in 964ms
필수값 , 선택값 구분
program
.command("template <type>") // <type> 은 필수값, [type] 은 선택 값
버전 확인
D:\code\node\cli>npx cli -v
0.0.1
설명내용을 확인 가능
D:\code\node\cli>npx cli -h
Usage: cli [options] [command]
Options:
-v, --version output the version number
-h, --help display help for command
Commands:
template|tmpl [options] <type> 템플릿을 생성합니다.
명령어를 실행하면 아래와 같이 템플릿이 포함된 파일을 자동으로 만들어 준다.
아래는 inquirer 버전 URL 이다.
https://www.npmjs.com/package/inquirer?activeTab=versions
npx cli 로 실행하고 선택할 때는 화살표로 움직일 수 있다.
D:\code\node\cli>npx cli
? 템플릿 종류를 선택하세요. html
? 파일의 이름을 입력하세요. new
? 파일이 위치할 폴더의 경로를 입력하세요. public/html
? 생성하시겠습니까? Yes
이미 해당 파일이 존재합니다
터미널을 종료합니다.
조금 더 꾸며볼 수 있다.
chalk 를 설치하면 색깔을 입힐 수 있게 해준다.
D:\code\node\cli>npm i chalk@4
up to date, audited 54 packages in 1s
15 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
에러 내용 같은 경우에 아래와 같이 빨간색 볼드체로 보이게 할 수 있다.
console.error(chalk.bold.red("이미 해당 파일이 존재합니다"));
성공은 아래와 같이 초록색으로 보이게 할 수 있다.
console.log(chalk.green(pathToFile, "생성 완료"));
아래는 색상이 변경된 결과 화면이다.