본문 바로가기

IT/Javascript/jQuery

[Node.js] Module 탐색 경로

본 포스트는 Ben Nadel의 다음 포스트를 부분 발췌 및 번역한 포스팅이다.

http://www.bennadel.com/blog/2169-where-does-node-js-and-require-look-for-modules.htm


Node.js 공식 도큐먼트에서의 해당 내용 관련 항목

https://nodejs.org/api/modules.html#modules_modules


Node.js와 require() 메서드는 Node.js의 모듈을 로딩할 때 어느 경로를 찾는가? 에 대한 포스트.

Ben Nadel의 포스트에서 확인 할 수 있었던 몇 가지 유용한 사항들을 정리하여 공유한다.


1. require() 메서드는 전역메서드로써, javascript 모듈을 로드하여 singleton 형태로 캐싱한다.


2. require() 메서드의 인자로 로딩하고자 하는 모듈의 상대 및 절대 경로를 넘겨준다.


2-1. 상대 및 절대 경로의 예는 다음과 같다.


2-1-1. 상대 경로의 예: require( "./module-a.js" );

2-1-2. 절대 경로의 예: require( "/my-library/module-b.js" );


2-2. js 확장자는 붙이지 않아도 좋다. 자동으로 붙여줌.


2-3. 주어진 경로에서 다음의 파일들을 탐색한다: index.js, package.js


3. 경로가 아닌 모듈명만 명시된 경우, 코어 모듈(http, fs, sys 등등..)이 아닌 경우 node_modules 폴더를 root 폴더로

최초 모듈명.js를 찾고, 이후 주어진 모듈명과 일치하는 폴더에서 index.js, packages.js 파일을 찾는다.


3-1. 만약 utils 모듈을 require() 메서드로 호출한다면 Node.js가 찾는 파일의 경로는 다음과 같다.


3-1-1. ./node_modules/utils.js

3-1-2. ./node_modules/utils/index.js

3-1-3. ./node_modules/utils/package.js


4. 3에서 설명된 경로에서 모듈을 찾지 못할 경우 require.paths 배열에 정의된 경로를 찾는데,

기본적으로 require.paths 문자열 배열은 NODE_PATH 환경변수에 정의된 부분이다.


4.1 2015년 11월 16일 기준 require.paths는 삭제되었으며, NODE_PATH 환경변수를 직접 참조하도록 권고하고있다.

require.paths is removed. Use node_modules folders, or the NODE_PATH environment variable instead.