February 08, 2022
최근에 Node.JS 쪽으로 개발을 진행해보고 있다.
Spring boot만 쓰다가 새롭게 해보니까 신기한게 많았다.
그리고 jQuery만 쓰고 수준 낮은 형태의 JS 개발을 했었던 내 개발 방법이 싫어서 이번에 JS도 다시 제대로 배워보고 있다.
근데 Node에서 아주 답답한게 있었다…
난 ES6 형식으로 개발하는데 모듈을 임포트할 때 아래와 같은 문제가 있었다.
import * as init from "../../config/main_init.js"
import * as auth from "../../middleware/auth.js";
저 경로 보이는가?
처음에 몇개 간단하게 쓸 때는 안거슬렸는데 점점 코드가 늘어나면서 상당히 귀찮게 되었다.
게다가 해당 파일의 위치가 변경될 경우 이 부분도 문제가 되었다.
그래서 구글에 이것저것 찾아보는데 이쪽으론 어떤 식으로 키워드를 넣어야 할지 몰라서 좀 삽질했다.
사실 간단한 패키지 하나 설치하면 끝났을 문제기도 한데…난 뭔가 더 설치하기가 좀 불편했다.
덕지덕지 쌓이기만 할 뿐더러 보안 문제가 생길수도 있을거 같아서 사람이 많이 받아서 쓰거나 가급적 안쓰는 방식으로 진행했다.
위에서 나온 버전에 해당되는 경우 아주 간단하게 그리고 다른 패키지를 설치하지 않고 해결할 수 있다.
먼저 package.json에서 다음과 같이 작성한다.
{
...
"license": "None",
"type": "module",
"imports": {
...
"#middleware/*": "./some_path/src/middleware/*",
"#config/*": "./some_path/src/config/*",
"#route/*": "./some_path/src/route/*",
"#entity/*": "./some_path/src/entity/*",
"#util/*": "./some_path/src/utils/*"
...
},
"scripts": {
"dev": " nodemon ./start.js",
}
....
}
위에서 잘 봐야 할 부분은 import 부분이다. 여기서 양식은 아래와 같다.
[#지정 경로명/*] : [실제 경로명]
앞은 #을 붙이고 원하는 경로명을 적고 /* 로 마무리를 적고, 뒤는 실제 경로면을 적으면 끝. 그럼 코드에서 아래와 같이 import 할 수 있다.
import * as init from "#config/main_init.js"
import * as auth from "#middleware/auth.js";
이렇게 사용이 가능하다.
이 경우에는 패키지를 설치하는게 좋다… module-alias 라는 패키지인데 이걸로 해결하는게 깔끔할듯..
여담인데 난 이 방법은 안써봤다.
https://stackoverflow.com/questions/33214780/how-to-have-path-alias-in-nodejs