실례를 통해 Nodejs 모듈 시스템 및 require 메커니즘 이해

1. 소개
Nodejs에는 간단한 모듈 로딩 시스템이 있습니다.Nodejs에서 파일과 모듈은 하나의 독립된 모듈로 간주됩니다. 이 파일은 JavaScript 코드, JSON 또는 컴파일된 C/C++ 확장자일 수 있습니다. 예를 들어

/**
 *foo.js
 * js 
 */
exports.hello = function() {
  console.log("hello Nodejs!");
}

/**
 *main.js
 *main.js foo.js 
 * :hello Nodejs!
 */
var foo = require("./foo.js");

foo.hello();
2. 모듈을 어떻게 내보내나요-모듈.exports와 exports의 차이
Nodejs의 모든 모듈은module 대상을 자동으로 만들고module 대상 아래에exports라는 속성이 있습니다. 어떤 종류의 실례를 모듈에 부여할 수 있습니다.exports, 이 종류의 실례를 내보냅니다.모듈이 실행되기 전에 Nodejs는 모듈을 실행합니다.exports의 값은 모듈을 위한 전역 변수 exports에 부여됩니다.exports.f = ... 더 간결하게 exports로 쓸 수 있습니다.f = ... .주의: 모든 변수와 같이 exports에 값을 다시 부여하면 모듈에 귀속되지 않습니다.exports입니다. 지정한 모듈을 내보낼 수 없습니다.
예:

/**
 *foo.js
 * :var foo = require("./foo.js");
 */
function Foo() {}
Foo.prototype.hello = function() {
  console.log("hello Nodejs!");
}

module.exports = new Foo();

/**
 *foo.js
 * :var Foo = require("./foo.js"); var foo = new Foo();
 */
function Foo() {}
Foo.prototype.hello = function() {
  console.log("hello Nodejs!");
}

module.exports = Foo;

/**
 *foo.js
 * :var foo = require("./foo.js");
 */
exports.hello = function() {
  console.log("hello Nodejs!");
}
3. 리퀴어의 메커니즘
Y가 경로이고 X가 파일 이름이나 디렉터리 이름이라고 가정하면 Nodejs가 require(YoY + X)를 만났을 때 다음 순서대로 처리합니다.
1. X가 핵심 모듈인 경우(예: require("http")
a. 이 모듈로 돌아가기
b. 더 이상 실행하지 않음
2. Y가 "./", "/"또는 "./"로 시작하는 경우
a. X를 파일로 삼고 지정한 경로부터 다음 파일을 순서대로 찾습니다: X, X.js, X.json, X.node, 그 중 하나만 존재하면 이 파일로 돌아가서 더 이상 실행하지 않습니다.
b. X를 디렉터리로 하고 지정한 경로부터 다음 파일을 순서대로 찾습니다: X/package.json(main 필드), X/index.js、X/index.json、X/index.node, 그 중 하나만 존재하면 이 파일로 돌아가서 더 이상 실행하지 않습니다
  3.X가 코어 모듈이 아니거나 "./", "/"또는 "./"로 시작하지 않으면 Nodejs는 현재 모듈의 부모 디렉터리에서 시작하여/node_모듈 디렉터리에 모듈을 불러옵니다. 만약 찾지 못하면, 파일 시스템의 루트 디렉터리로 이동합니다.
  4."not found"던지기
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기