vercel에 배포 후 빌드하는 과정에서 Module not found 모듈을 찾을 수 없다는 에러 메시지가 아래와 같이 나왔다.
Failed to compile.
Module not found: Can`t resolve `파일 경로 명`
해당 파일의 경로 문제도 아니였고 로컬에서도 문제 없이 잘 실행되어서 정확한 원인을 파악하지 못했다.
원인
먼저 에러의 원인을 찾고자 여러 포스트 글을 읽으면서 저장소와 로컬의 파일이름의 대소문자 불일치로 발생하는 점 을 알게되었다.
되짚어보면 에러가 발생하는 파일의 파일명을 대문자로 오타를 내고 push을 하여 저장소에 올렸었다. 그리고 추후에 다시 오타를 소문자로 수정했었다.
찾아보니 git은 대소문자를 구별하지 않는다고 한다.
예를 들면 Profile을 기대하고있는데 수정된 profile의 디렉토리를 찾으면 같은 파일로 취급해서 대소문자를 구별하지 않는다.
실제로 소문자로 수정된 profile의 파일을 저장소에 push해도 계속 기존 대문자의 Profile의 파일명으로 남아있었다.
해결 과정
> 찾아본 해결 방법들
1) 파일 이동
- git mv oldNameFileOrFolder newNameFileOrFolder
2) 대소문자 구분 처리
- git config core.ignorecase false
시도한 해결 방법은 파일이나 폴더 이름을 소문자나 대문자로 변경한 경우 원격 브랜치가 변경한 이름으로 업데이트되지 않을 수 있어 위 명령어로 폴더의 이름을 변경하고 다른 위치로 이동하여 commit + push를 통한 방법이였다.
하지만 위 방법을 하면서 ls 목록에는 있었지만 해당 디렉토리가 존재하지 않다는 "No such file or directory" 에러가 나오면서 더 이상 진행 할 수 없었다.
결국에는 변경한 파일명으로 업데이트가 되지 않았으니깐 수동으로 문제의 파일을 직접 복사해서 이름을 변경하고 이 파일을 프로젝트에 넣었다. 그리고 목록에는 존재하지만 디렉토리가 존재하지 않았던 기존의 파일은 프로젝트에서 삭제하고 이대로 커밋을 남기고 직접 복사해서 가져온 파일을 다시 "ex) profile" 이렇게 소문자로 변경하고 커밋 후 push해서 저장소에 올렸다.
그러면서 저장소에도 기존의 대문자 "ex) Profile"의 파일명에서 재대로 "profile"로 변경되었고 빌드에러도 해결되었다.
위 명령어로 해결이 안되서 뭔가 직접 파일을 복사하고 이름 변경 해주면 업데이트가 되지않을까 생각했는데 그대로 잘 해결되서 다행이였다.
에러 해결이 되어서 2번째 방법인 대소문자 구분 처리하는 명령어는 사용해보지 못했다.