Node교과서 정리

송은우·2022년 1월 14일
0

CLI(command line interface)
GUI(graphic user interface)

여기는 npm init 할때 썼던 entrypoint 명칭이 중요함
그 파일로 생성해야 CLI 커맨드 생성 가능
package.json에 넣기

"bin": {
    "cli": "./command.js"
  },

#!/usr/bin/env node
부분은
window가 아닌
mac, linux에서 있는 어떤 방식으로 실행할 지에 관한 것

process.argv 를 보면
배열인데 0은 node 경로, 1은 cli 명령어 경로 2부터는 실행 이후 콘솔에 넣은 매개변수

readline 내장 모듈(3장에 대충 나왔음)

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
r1.question("asdf",(input)=>{
  if(input==="a"){
    console.log("a");
  }
  r1.close();
})

이게 가장 기본적인 형태임.
콜백을 뒤에 넣어버리면서 재귀로 처리할 수도 있음

const answerCallback = (answer) => {
  if (answer === "y") {
    console.log("감사합니다!");
    rl.close();
  } else if (answer === "n") {
    console.log("죄송합니다!");
    rl.close();
  } else {
    console.clear();
    console.log("y 또는 n만 입력하세요.");
    rl.question("예제가 재미있습니까? (y/n) ", answerCallback);
  }
};
rl.question("예제가 재미있습니까? (y/n) ", answerCallback);

console.clear의 동작은 운영체제별로(쉘 종류별로) 다를 수 있음.

mkdirp 같은 경우는 c://hello/world/abc/def/같은 경로를 한 번에 만들 수 있음.
npm rm -g 같은 경우로 현재 폴더 전역 설치 날릴 수 있음

npm i commander inquirer chalk(콘솔 색상)
버전이 중요함. package.json 으로 version을 가져오는 것

const {version} =require("./package.json");
program
 .version(version, '-v,--version')
 .name('cli');

버전 적용 방법
-v 로 --version 단축도 가능함.

program
  .command('template <type>')
  .usage('<type> --filename [filename] --path [path]')
  .description('템플릿을 생성합니다.')
  .alias('tmpl')
  .option('-f, --filename [filename]', '파일명을 입력하세요.', 'index')
  .option('-d, --directory [path]', '생성 경로를 입력하세요', '.')
  .action((type, options) => {
    makeTemplate(type, options.filename, options.directory);
  });

<>는 필수 를 의미함. usage, description은 사용 방법 설명함
cli -h 로 문서화 된것을 가져올 수 있음.
action 에 콘솔로그로 다 찍을 수 있음.
cli abc같은 것을 적어서 등록하지 않은 것을 쓰면
program
.command('*',{noHelp:true});
.action(()=>{
console.log("명령어 못 찾음");
program.help(); //cli -h;
});

위 부분이 없는 경우는 모든 경우를 아래서 다 처리할 수도 있음

그냥 cli 만 친 경우는 이렇게 다룰 수 있음.
program.action((cmd,args)=>{})가 실행됨

inquirer 사용 방법은 propmt에 배열로 다 집어넣고, 그 이후에 then으로 결과를 받음.
prompt에서 오타 방지를 위해 list로 처리하고, choice로 처리하는 방법이 있음.
default 로 input을 처리할 수 있음.

inquirer는 분기 처리가 훨씬 중요함. commander는 yargs, meow 등 여러가지 대체재가 많기에 편한 걸 골라 잡으면 됨.

profile
학생의 마음가짐으로 최선을 다하자

0개의 댓글