linux 환경에서 위와 같은 커맨드를 사용하면 빈 파일을 생성할 수 있다. 이 명령어를 Windows 커맨드에서도 그대로 사용할 수 있도록 만들던 도중 이슈가 발생했다.
program
.command("<filename>")
.description("make new empty file")
.action(touchActionFunc);
위와 같이 <filename>만 놔두는 상황이라서 command가 먹히지 않아 Command Not Found 에러가 발생하는 이슈가 생겼다.
command는 원래 해당 명령을 식별할 수 있어야 하는데 <>는 option 중 하나이기 때문에, command를 찾는데 소용이 없는 것 같다.
그렇다면, 저 <filename>은 command가 아니라면 어디에 속하는 것일까? 고민을 하던 도중 예전에 사용했던 arguments
메서드가 생각났다. 가만히 생각해보면 argument라고 하는 쪽이 더 어울리기도 하고 말이다.
program
.arguments("<filename>")
.description("make new empty file")
.action(touchActionFunc);
그래서 위와 같이 변경하였더니 동작은 정상적으로 동작했다. 다만, 여기서도 이슈가 발생했는데, 그건 바로 filename
을 인자로 전달하지 않았을 때 이 경우 바로 콘솔창에 error: missing required argument 'filename'
이 바로 출력되는 것이었다.
물론 에러 메시지가 출력되기 때문에 그대로 사용해도 괜찮을 것이라 생각하겠지만, 현재 나는 이 프로젝트에서 에러 메시지는 모두 빨간 글씨로 출력되도록 관리하고 있다.
그래서 이 에러를 처리하기 위해 구글링을 하던 도중 좋은 글을 찾아 해결할 수 있었다.
if (!process.argv.slice(2).length) {
throw new Error("Missing required argument 'filename'");
}
간단하게 process.argv
의 2번째 인자가 전달되지 않았다면 error를 throw하면 쉽게 해결할 수 있는 문제였다.