Node.js 모듈 시스템


Node.js 파일이 서로 호출할 수 있도록 Node.js에서는 간단한 모듈 시스템을 제공합니다.

모듈은 Node.js 애플리케이션의 기본 구성 요소이며 파일과 모듈은 일대일 대응을 갖습니다. 즉, Node.js 파일은 JavaScript 코드, JSON 또는 컴파일된 C/C++ 확장일 수 있는 모듈입니다.

모듈 만들기

Node.js에서 모듈을 만드는 것은 매우 간단합니다. 다음과 같이 다음 코드로 'main.js' 파일을 만듭니다.

var hello = require('./hello');
hello.world();

위 예에서 코드 require('./ hello')가 도입되었습니다. 현재 디렉터리(./는 현재 디렉터리이고 node.js의 기본 접미사는 js입니다)의 hello.js 파일입니다.

Node.js는 내보내기와 요구라는 두 가지 객체를 제공합니다. 여기서 내보내기는 모듈에 의해 노출되는 인터페이스이고, require는 외부에서 모듈의 인터페이스, 즉 획득한 모듈의 내보내기 객체를 얻는 데 사용됩니다.

다음으로 hello.js 파일을 생성합니다. 코드는 다음과 같습니다:

exports.world = function() {
  console.log('Hello World');
}

위의 예에서 hello.js는 내보내기 개체를 사용하여 모듈의 액세스 인터페이스로 world를 사용하고, main.js에서는 require를 통해 사용합니다. ('./hello')를 사용하여 이 모듈을 로드한 다음 직접 액세스할 수 있습니다. hello.js에서 내보내기 개체의 멤버 함수에 대해 문의하세요.

때때로 객체를 모듈로 캡슐화하려는 경우 형식은 다음과 같습니다.

module.exports = function() {
  // ...
}

예:

//hello.js 
function Hello() { 
	var name; 
	this.setName = function(thyName) { 
		name = thyName; 
	}; 
	this.sayHello = function() { 
		console.log('Hello ' + name); 
	}; 
}; 
module.exports = Hello;

이 방법으로 객체를 직접 가져올 수 있습니다.

//main.js 
var Hello = require('./hello'); 
hello = new Hello(); 
hello.setName('BYVoid'); 
hello.sayHello();

모듈 인터페이스의 유일한 변경 사항은 다음과 같습니다. module.exports = Hello 대체된 imports.world = function(){}을 사용하세요. 모듈이 외부에서 참조될 때 해당 인터페이스 개체는 원본이 아닌 출력되는 Hello 개체 자체입니다. 수출.


서버측 모듈을 어디에 두어야 할까요?

아마도 우리가 코드에 모듈을 사용했다는 것을 눈치채셨을 것입니다. 다음과 같이:

var http = require("http");

...

http.createServer(...);

Node.js에는 "http"라는 모듈이 함께 제공되며 코드에서 이를 요청하고 반환 값을 지역 변수에 할당합니다.

이것은 우리의 지역 변수를 http 모듈에서 제공하는 모든 공개 메소드를 가진 객체로 변환합니다.

Node.js의 require 메소드에서 파일 검색 전략은 다음과 같습니다.

Node.js에는 4가지 유형의 모듈(네이티브 모듈과 3가지 파일 모듈)이 있지만 require 메소드는 매우 간단하기 때문에, 내부 로딩은 매우 복잡하며 로딩 우선순위도 다릅니다. 아래 그림과 같이:

nodejs-require

파일 모듈 캐시에서 로드

네이티브 모듈과 파일 모듈의 우선 순위는 다르지만 파일 모듈 캐시에서 기존 모듈을 로드하는 것보다 우선하지 않습니다.

네이티브 모듈에서 로드

네이티브 모듈의 우선순위는 파일 모듈 캐시의 우선순위 다음으로 높습니다. 파일 이름을 구문 분석한 후 require 메소드는 먼저 해당 모듈이 기본 모듈 목록에 있는지 확인합니다. http 모듈을 예로 들어 보겠습니다. 디렉터리에 http/http.js/http.node/http.json 파일이 있지만 require("http")는 이러한 파일에서 로드되지 않고 기본 모듈에서 로드됩니다.

네이티브 모듈에도 캐시 영역이 있으며, 캐시 영역에서 먼저 로드되기도 합니다. 캐시 영역이 로드되지 않은 경우 네이티브 모듈 로딩 메서드가 호출되어 로드 및 실행됩니다.

파일에서 로드

파일 모듈 캐시가 존재하지 않고 기본 모듈이 아닌 경우 Node.js는 require 메소드에 전달된 매개변수를 구문 분석하고 파일 시스템에서 실제 파일을 로드합니다. 이전 섹션에서 소개했습니다. 여기서는 파일 모듈을 찾는 과정을 자세히 설명합니다. 또한 알아둘 만한 몇 가지 세부 사항도 있습니다.

require 메소드는

  • http, fs, path 등의 기본 모듈 매개변수를 허용합니다.

  • ./mod 또는 ../mod, 상대 경로가 있는 파일 모듈.

  • /pathtomodule/mod, 절대 경로가 있는 파일 모듈.

  • mod, 비네이티브 모듈용 파일 모듈입니다.