toggle menu

[NodeJS] 모듈 로딩 순서

2014. 12. 29. 09:41 Node.js

노드 모듈은 코어 모듈과 파일 모듈로 구분되는데, 이 모듈의 로딩 순서에 대해서 알 필요가 있을 때도 있다.


모듈을 로딩하는 순서에 대한 pseudo code 를 제공하고 있어 이해할 겸 다시 정리해보았다.


모듈에 대한 자세한 내용은 노드 공식 문서의 모듈 파트 를 참고하자.





Y 라는 경로에 있는 모듈에서 require(X) 를 호출했을 경우

	1. 만약 X 가 코어 모듈인 경우, 코어 모듈을 리턴한다. 끝.

	2. 만약 X 가 './' 또는 '/' 또는 '../' 로 시작할 경우
		a. LOAD_AS_FILE(Y + X) 를 시도한다.
		b. LOAD_AS_DIRECTORY(Y + X) 를 시도한다.

	3. LOAD_NODE_MODULES(X, dirname(Y)) 를 시도한다.

	4. 여기까지 해도 없으면 "not found" 를 던진다.



	LOAD_AS_FILE(X)

		1. 만약 X 가 파일이라면, X 를 자바스크립트 텍스트로 불러온다. 끝.

		2. 만약 X.js 가 파일이면, X.js 를 자바스크립트 텍스트로 불러온다. 끝.

		3. 만약 X.json 이 파일이면, X.json 을 자바스크립트 객체로 불러온다. 끝.

		4. 만약 X.node 가 파일이라면, X.node 를 바이너리로써 추가한다. 끝.



	LOAD_AS_DIRECTORY(X)

		1. 만약 X 라는 이름의 폴더 아래에 package.json 이란 파일이 있으면,
			a. X/package.json 파일을 파싱해서, "main" 필드가 있는지 찾는다.
			b. M = X + 메인 필드
			c. LOAD_AS_FILE(M) 을 시도한다.

		2. 만약 X 라는 이름의 폴더 아래에 index.js 이란 파일이 있으면,
			X/index.js 파일을 자바스크립트 텍스트로 불러온다. 끝.

		3. 만약 X 라는 이름의 폴더 아래에 index.json 이란 파일이 있으면,
			X/index.json 파일을 자바스크립트 객체로 불러온다. 끝.

		4. 만약 X 라는 이름의 폴더 아래에 index.node 란 파일이 있으면,
			X/index.node 파일을 바이너리로써 추가한다. 끝.



	LOAD_NODE_MODULES(X, START)

		1. DIRS = NODE_MODULES_PATHS(START)

		2. DIRS 의 각 DIR 에 대해서,
			a. LOAD_AS_FILE(DIR/X) 를 시도한다.
			b. LOAD_AS_DIRECTORY(DIR/X) 를 시도한다.



	NODE_MODULES_PATHS(START)

		1. PARTS = 전체 경로를 단계별로 분리

		2. I = PARTS 의 갯수

		3. while I >= 0,
			a. 만약 PARTS[I] 가 "node_modules" 이면, I = I - 1 수행 후 CONTINUE
			b. 아니면 DIR = PARTS[0 .. I] 의 경로를 합친 것 + "node_modules"
			c. DIRS = DIRS + DIR
			d. I = I - 1

		4. DIRS 를 리턴한다.




Node.js 관련 포스팅 더보기