Node.js가 모듈을 로드하고 모듈 인스턴스를 설치하는 방법에 대한 자세한 설명

伊谢尔伦
풀어 주다: 2017-07-24 10:17:57
원래의
1826명이 탐색했습니다.

Node.js의 모듈은 파일 경로나 이름을 통해 모듈 참조를 얻을 수 있습니다. 모듈 참조는 Node 내장 모듈이 아닌 한 js 파일 경로에 매핑됩니다. Node의 내장 모듈은 일반적으로 사용되는 일부 API를 개발자에게 공개하며 Node 프로세스가 시작될 때 미리 로드됩니다.

NPM을 통해 설치된 타사 모듈이나 로컬 모듈과 같은 기타 모듈은 공개 API를 노출합니다. 개발자가 가져올 수 있도록 합니다. 예를 들어

var mod = require('module_name')
로그인 후 복사

이 문장을 실행한 후 Node는 내장 모듈이나 NPM을 통해 설치된 모듈을 로드합니다. require 함수는 객체를 반환합니다. 객체에 의해 노출되는 API는 함수, 객체 또는 함수, 배열 또는 모든 유형의 JS 객체와 같은 속성일 수 있습니다.

노드 모듈의 로딩 및 캐싱 메커니즘은 다음과 같습니다

1) 내장 모듈(A 코어 모듈) 로드
2) 파일 모듈(A 파일 모듈) 로드
3) 파일 디렉터리 모듈(A 폴더) 로드 Module) )
4) node_modules에 모듈 로드
5) 로드된 모듈 자동 캐시

1. 내장 모듈 로드

Node의 내장 모듈은 바이너리 형식으로 컴파일되며 파일 경로 대신 이름으로 직접 참조됩니다. 타사 모듈이 내장 모듈과 동일한 이름을 갖는 경우 내장 모듈은 동일한 이름으로 타사 모듈을 덮어씁니다. 따라서 이름을 지을 때 내장된 모듈과 이름이 동일하지 않도록 주의해야 합니다. 예를 들어 http 모듈

var http = require('http')
로그인 후 복사

을 얻는 경우 반환되는 http는 HTTP 기능을 구현하는 Node의 내장 모듈입니다.

2. 파일 모듈 로드

절대 경로

var myMod = require('/home/base/my_mod')
로그인 후 복사

또는 상대 경로

var myMod = require('./my_mod')
로그인 후 복사

여기서 확장자 ".js"는 무시됩니다. 다음은 동일합니다.

var myMod = require('./my_mod')
var myMod = require('./my_mod.js')
로그인 후 복사

3. 파일 디렉터리 모듈 로드

You

var myMod = require('./folder')
로그인 후 복사

와 같은 폴더라는 이름의 디렉터리가 있다고 가정합니다. 이때 노드는 폴더 디렉터리 전체를 검색합니다. 노드는 해당 폴더가 패키지라고 가정하고 패키지 정의 파일 패키지를 찾으려고 시도합니다. json. 폴더 디렉터리에 package.json 파일이 없으면 Node는 기본 기본 파일이 index.js라고 가정하고 index.js가 로드됩니다. index.js도 존재하지 않으면 로드가 실패합니다.

디렉토리 구조가 다음과 같다면

Node.js가 모듈을 로드하고 모듈 인스턴스를 설치하는 방법에 대한 자세한 설명

package.json은 다음과 같이 정의됩니다

{
    "name": "pack",
    "main": "modA.js"
}
로그인 후 복사

이때 require('./folder')는 모듈 modA.js를 반환합니다. package.json이 없으면 index.js 모듈이 반환됩니다. index.js도 존재하지 않으면 로딩 예외가 발생합니다.

4. node_modules에 모듈을 로드합니다.

모듈 이름이 경로나 내장 모듈이 아닌 경우 Node는 현재 디렉터리의 node_modules 폴더에서 검색을 시도합니다. 현재 디렉터리의 node_modules를 찾을 수 없으면 Node는 상위 디렉터리의 node_modules에서 검색하고 루트 디렉터리까지 반복합니다.

걱정하지 마세요. npm 명령을 사용하면 node_modules 디렉터리를 쉽게 설치, 제거 및 업데이트할 수 있습니다.

5. 로드된 모듈을 자동으로 캐시합니다.

노드는 매번 다시 검색할 필요 없이 로드된 모듈을 캐시합니다. 다음은 예시입니다

modA.js

console.log('模块modA开始加载...')
exports = function() {
    console.log('Hi')
}
console.log('模块modA加载完毕')
로그인 후 복사

init.js

var mod1 = require('./modA')
var mod2 = require('./modA')
console.log(mod1 === mod2)
로그인 후 복사

명령줄 실행:

node init.js

입력은 다음과 같습니다

Node.js가 모듈을 로드하고 모듈 인스턴스를 설치하는 방법에 대한 자세한 설명

modA가 두 번 요구되는 것을 볼 수 있습니다. .js 여전히 한 번만 실행됩니다. mod1과 mod2는 동일합니다. 즉, 두 참조 모두 동일한 모듈 객체를 가리킵니다.

위 내용은 Node.js가 모듈을 로드하고 모듈 인스턴스를 설치하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿