문제
JavaScript에서 CommonJS 형식인 module.exports를 통해 객체를 export할 수 있습니다. 아래 코드는 math.js 내의 산술연산 함수들을 export하고 있습니다.
그리고 math.js의 함수를 사용하는 index.js 가 있습니다.
지금 상황에서는 index.js가 math.js의 sum과 subtract 함수를 import 하여 사용하고 있는데요, 만약, 다양한 코드 영역에서 sum 함수를 import하여 사용하고 있을 때, sum 함수를 참조하고 있는 모든 영역을 찾고 싶을 때 어떻게 해야 할까요?
VSCode에서는 <Find Reference> 기능을 통해 선택한 속성을 참조하는 코드 영역을 모두 찾아줍니다. 그런데, 위 코드처럼 CommonJS 형식으로 export한 속성들은 같은 파일 내에서만 참조를 찾아주는 문제가 있습니다.
해외에서도 이 문제에 대해 많은 사람들이 이슈 제기를 하고 있는 상황입니다.
https://github.com/microsoft/vscode/issues/21507
대안
CommonJS에서 ESModule로 넘어가는 것이 가장 좋지만, 어쩔 수 없이 CommonJS를 계속 사용해야 한다면, 아래와 같이 export 대상 객체를 Object.freeze로 한번 감싸줌으로써 <Find Reference>에서 검색이 되도록 만들 수 있습니다.
위와 같이 Object.freeze()로 객체를 감싼 후 <Find Reference>를 요청했을 때의 결과는 아래와 같습니다.
마무리
IntelliJ와 같은 유료 프로그램에서는 굳이 Object.freeze()로 감싸지 않더라도 참조를 잘 찾아주는 것으로 알고 있는데요, VSCode는 조금 더 분발해야 겠습니다.
'컴퓨터 공학 > JavaScript' 카테고리의 다른 글
Understanding the Token Bucket Algorithm in JavaScript (0) | 2022.12.21 |
---|---|
pkg 모듈 실행 시 "(0, assert_1.default)(!this.bar)" 에러 발생하는 경우 (0) | 2022.12.04 |
Cloudflare Workers와 Notion API로 유저 데이터 관리하기 (0) | 2022.08.14 |
JavaScript로 interface 모사하기 (0) | 2022.08.06 |
Node.js - async_hooks 소개 (0) | 2022.07.24 |