실례를 통해 Nodejs 모듈 시스템 및 require 메커니즘 이해
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"던지기
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
NestJs Guard하지만 가드는 ExcutionContext를 사용할 수 있기 때문에 다음에 어떠한 라우트 핸들러가 실행되는지 정확하게 알 수 있다. ExecutionContext는 ArgumentsHost를 상속 받았기 때문에 각 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.