이 글을 먼저 읽기 전에 아래 글을 먼저 읽고 오시는 걸 추천드립니다..!
프로젝트를 할 때마다 번역하는 일이 너무 귀찮아서, 직접 번역을 해주는 스크립트를 짰다.
그리고 팀 내에서 일주일에 한 번씩 진행하는 기술 위클리에서 내가 만든 스크립트를 공유하게 됐다. 왜 만들었는지, 번역이 얼마나 귀찮은 작업인지(한 번이라도 나와 같은 서비스의 코드를 만져본 팀원이라면 다 알 테니까..!) 그래서 이게 얼마나 획기적인지 솔직히 입이 근질근질 거렸기 때문에 남들 앞에서 뭔가 소개하는 건 부끄럽지만 용기내서 발표를 했다.
사실 나는 이 스크립트를 프로젝트에 넣을 생각은 없었다. 파일을 읽고 다시 쓰는 것도 근데 생각보다 반응이 너무 좋았다.
(내 생각보다 더 고통을 받고 있었을지도..?)
팀원들이 우리 프로젝트에 해당 스크립트를 포함해서 다른 사람들도 쓸 수 있었으면 좋겠다고 했다.
그래서 디벨롭이 시작됐다. 😇
https://docs.npmjs.com/cli/v10/configuring-npm/package-json#bin
package를 만들어 본 적이 없던 나였기에 bin 파일에 대해 이번에 작업을 하면서 처음 알게 되었다. package.json 에 bin에 명시를 해야 해당 패키지가 비로소 npm과 같은 패키지 관리자가 어떤 파일을 실행해야 될 지 알게 되는 것이었다..! 그래서 ts로 작업했던 3개의 파일을 babel을 가지고 js 파일로 만든 다음 bin 파일에 추가해 각각의 서비스 내의 cli 스크립트로 실행시킬 수 있도록 만들었다.
이번에 작업하면서 새롭게 안 사실인데, tsc로 .ts 모듈을 .js로 모듈로 트랜스파일링하면 .ts 파일 내에서 import 하고 있는 다른 모듈의 경로가 알아서 .js로 바뀔 줄 알았는데 전혀 아니었다. .ts로 선언하면 tsc 트랜스파일링 해도 여전히 /~~~.ts 로 남게 되고 결국 모듈의 위치를 제대로 못 찾는다는 걸 알게됐다. 보통 ts 파일에서 경로 지정을 할 때 tsconfig.json에 baseUrl과 path를 설정하고 커스텀한 절대 경로를 많이들 사용할텐데 이 때 보통 파일 확장자는 명시하지 않기 때문에 빌드 결과물 역시 파일 확장자가 제대로 .js로 변환되지 않는다..! (OMG 🤪)
그래서 babel 플러그인들을 활용해 모듈 위치까지 제대로 트랜스파일링 해주었다.
1. 절대 경로로 설정된 모듈 위치를 상대 위치로 바꾼다.
2. .ts로 명시된 위치를 .js로 변경한다.
일단 내가 다른 개발자들의 수고로움을 덜어줄 수 있는 작은 장치를 만들었다는 게 뿌듯했고, 개인적으로 재밌었다. 좀 더 편하게, 좀 더 쓰기 쉽게를 생각하다보니 조금씩 더 발전했던 것 같다. 앞으로도 이렇게 개발 편의성을 높여줄 수 있는 도구를 많이 만들어 일을 쉽게 해야지 :)
fin.