[Node.js] 기본 핵심 모듈의 모듈
소개
Node.js의 모듈 디자인은 모든 부품이 하나의 모듈로 되어 있다.모듈 순환 도입 문제는 Node에 있습니다.js는 어떻게 처리하는지, 모듈 불러오는 규칙은 또 어떤 것들이 있는지, 구체적인 상세한 내용은 아래를 보십시오.
모듈 정의
공용을 채택하다.js의 규칙, 키워드
exports.a = function () {};
//
module.exports = {
a: function () {}
};
모듈의 내부 변수
__dirname 현재 모듈의 폴더 주소
__filename 현재 모듈의 파일 주소
require.main 실행 메인 포털 파일
// node app.js
console.log(module.main); // app
require.resolve 모듈에 대한 절대 경로 가져오기
// return /path/to/node_modules/express/lib/index.js
require.resolve('express');
exports 대상 모듈 내보내기 대상, 초기 대상과
module.exports
인용 주소 일치모듈 대상은 모든 모듈에서,모듈의 자유 변수는 현재 모듈을 나타내는 대상을 가리키는 인용입니다.
module.children 현재 모듈은 다른 모듈의 집합을 도입합니다. 예는 다음과 같습니다.
const moduleA = reuqire('moduleA');
require.children = [moduleA];
module.parent 대상이 이 모듈의 대상을 가장 먼저 도입한다. 예는 다음과 같다.js
// node app.js
const express = require('express');
console.log(module.parent); // undefined
module.exports = express();
main.js
const app = require('./app'); // moduleMain
app.listen(8080, function () {});
module.paths 모듈 검색 경로, 현재 모듈require 시 자동으로 불러오는 경로
모듈 설치
글로벌 설치
일반 모듈 전역 설치 모듈은
npm config get prefix
+/lib/node_modules 디렉터리에서 모듈 내부는 자신의 node_에 의존합니다모듈 중.예: npm install -g express
/usr/local/lib/node_modules
|-- express
|-- package.json
|-- lib/
|-- node_modules
|-- qs
|-- cookie
|-- ...
실행 명령을 가진 모듈은 전역 설치
npm install -g gulp
, 모듈은 정의된 gulp
명령을 포함하고 있으며, npm config get prefix
+/bin 디렉터리에 연결됩니다./usr/local/bin
|-- gulp
/usr/local/lib/node_modules
|-- gulp
|-- package.json
|-- bin
|-- gulp.js
|-- node_modules
|-- gulp-util
로컬 설치
일반 모듈 부분 설치 모듈과 전체 모듈의 차이점
process.cwd()
+/node_모듈 디렉터리에 모듈과 의존 모듈을 동시에 설치하는 것은 일반적으로 같은 수준의 디렉터리에 있습니다.
./node_modules
|-- express
|-- package.json
|-- lib/
|-- qs
|-- cookie
|-- ...
실행 명령이 있는 모듈 부분 설치,
bin
디렉터리가 node_modules/.bin
아래로 이동합니다
./node_modules
|-- .bin
|-- gulp
|-- gulp
|-- package.json
|-- bin
|-- gulp.js
|-- gulp-util
|-- ...
로드 모듈 메커니즘
상대 경로
// 1. ./a.js
// 2. ./a.json
// 3. ./a.node
// 4. ./a/index.js
// 5. ./a/index.json
// 6. ./a/index.node
const a = require('./a');
//
const b = require('../b');
절대 경로
const path = require('path');
const c = require('/usr/local/lib/c');
const d = require(path.resolve(__dirname, './d'));
모듈 이름 일치
내장 모듈이 우선적으로 일치하고, 비내장 모듈은module를 사용합니다.paths 다중 경로 및 결합
prefix
+/lib/node_모듈을 불러옵니다.
require.resolve('express');
모듈 패키지
모듈 코드를 실행하기 전에 Node.js는 다음과 같은 함수 패키지를 사용하여 패키지를 구성합니다.
(function(exports, require, module, __filename, __dirname) {
//
});
이렇게 함으로써 Node.js는 다음과 같은 몇 가지를 실현했다.
모듈 순환 도입
가령
a.js
과b.js
가 있다면 로드a.js
시 도입b.js
, 동시b.js
도입a.js
이 있다면 도입 순서는 어떻습니까?실제로
a.js
console.log('a ');
exports.done = false;
const b = require('./b.js');
console.log(' a ,b.done = %j', b.done);
exports.done = true;
console.log('a ');
b.js
console.log('b ');
exports.done = false;
const a = require('./a.js');
console.log(' b ,a.done = %j', a.done);
exports.done = true;
console.log('b ');
main.js
console.log('main ');
const a = require('./a.js');
const b = require('./b.js');
console.log(' main ,a.done=%j,b.done=%j', a.done, b.done);
실행 결과
$ node main.js
main
a
b
b ,a.done = false
b
a ,b.done = true
a
main ,a.done=true,b.done=true
메인js가 a.js를 불러올 때, a.js는 또 b.js를 불러옵니다.이 때, b.js는 a.js를 불러오려고 시도합니다.무한한 순환을 방지하기 위해 a.js의 exports 대상의 미완성 복사본을 b.js 모듈에 되돌려줍니다.그리고 b.js가 불러오기를 완료하고 exports 대상을 a.js 모듈에 제공합니다.
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ASP.NET에서 특정 요청에 동적으로 HTTP 헤더를 설정하는 방법모든 요청에 Header를 추가하는 경우 Web.config에 를 추가하면 됩니다. 그러나 요청에 따라 헤더를 설정하려는 경우에는 사용할 수 없습니다. Web.config View를 돌려주는 Controller로 H...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.