사용자가 내가 원하는 위치에서 실행시켰는지 확인하기
PSG init
본 프로젝트의 주 기능인 "프로젝트 구조 생성" 기능을 사용하기 위해서는 반드시 해당 명령을 사용해 주 기능을 사용하기 위한 규칙이 적힌 메뉴얼과 필요한 것들을 생성할 수 있다.
다만, 이 경우는 사용자가 해당 프로젝트를 시작하고자 하는 위치, 즉 프로젝트의 최상단(root) 경로에서 실행을 시켜야 한다.
메뉴얼에 적어 놓고, 이상한 곳에서 실행이 되었다면 에러를 띄워서 실행이 되지 않게 하는 방식으로 실행했다만 가만히 생각해보니 큰 이슈였다.
실패를 하더라도 해당 기능을 위한 폴더는 생성이 된다는 것이다. 이렇게 되버리면 차후 init이 정상적으로 동작하지 않았음에도 동작될 수 있고, 이상한 곳에서 실행해도 이 폴더가 계속 생성이 된다는 문제가 있었다.
해결 방법
파일 복사를 더 쉽게 못하나?
기존에 파일을 복사하는 방식을 보고 아무리 생각해도 Node.js에서 파일을 복사하는 기능을 이미 구현해놓았을 것이라는 생각이 들었다.
그래서 이 문제를 해결할 수 있는 방법을 찾던 도중 copyFile
메서드를 알게 되었다.
음? 기준 경로가 여기가 아닌가?
이 방식을 이용해 복사를 하려던 도중, 계속 에러가 발생했다. 사실 copyFile
메서드에 전달하는 경로가 해당 함수를 호출하는 파일의 위치를 기준으로 하는 줄 알았다. 그래서 상대경로를 ./../../../../README.md
같이 써놓았다.
이랬더니 에러 메시지가 "C:\\Users\\user\\README.md"
라고 출력되는 것이 아닌가? 아무래도 기준 경로가 내가 작업하고 있는 워크 스페이스 상의 최상단 경로인 것 같다.
그래서 해당 부분을 이용해 파일을 복사하는데 에러가 생기면 README.md 파일이 없어졌거나, 현재 실행 경로가 이상한 것이라는 것을 알 수 있었다.
해결한 코드
const { copyFile } = require("fs").promises;
copyFile("./README.md", `${servicePath}/../README.txt`)
.then(() => {
if (existsSync(servicePath)) {
printExceptionMessage(AlreadyServiceInit.message);
return;
}
mkdir(servicePath, error => {
if (error) {
printExceptionMessage(InternalProgramError.message);
return;
}
printSuccessMessage("Success: PSG init")
})
.catch(() => printExceptionMessage(`
Error: Please check next conditions
1. Did you delete the README.md that were in the library when you downloaded?
In this case, you can redownload this libary, then you can solve.
2. Did you enter this command at your project root directory?
`));
회고
이번에는 우연으로 해결하게 되었지만 앞으로는 내가 알고 있는 지식을 통해 내가 맞닥뜨린 이슈를 해결할 수 있도록, 우연이 아니라 확신으로 할 수 있도록 더 많이 노력해야겠다.
2021.04.16. 추가
구글링을 하던 도중 이보다 더 쉽게 해결할 수 있는 방법을 찾았다. 좋은 글 써주신 P-iknow(피아노)님에게 감사인사를 전합니다.
path.resolve('')
// 이렇게 하면 현재 작업 중인 워킹 디렉토리를 얻을 수 있다.
path.resolve의 동작방식에 의해 이런 식으로 구할 수 있다는 것이다! Node.js를 1년 가까이 써 오고 있는데, 아직 이런 것도 모르다니...... 갈 길이 너무 먼 것 같다.
Author And Source
이 문제에 관하여(사용자가 내가 원하는 위치에서 실행시켰는지 확인하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@shin0805/사용자가-내가-원하는-위치에서-실행시켰는지-확인하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)