Nodejs 모듈 불 러 오기 운행 원리
Nodejs 를 사용 하면 제3자 모듈 을 참조 할 수 밖 에 없습니다.그들 중 일 부 는 Nodejs 자체 가 가지 고 있 는(예:http,net...)이 고 일 부 는 npm 에 발 표 된(예:mssql,elasticsearch...)입 니 다.
이 장 은 세 가지 문제 에 초점 을 맞춘다.
Nodejs 모듈 은 대략 4 가지 로 나 눌 수 있 습 니 다.
a)builtin module Nodejs 에서 C++형식 으로 제공 하 는 모듈.
b)constant module Nodejs 에서 상수 모듈 을 정의 합 니 다.
c)native module Nodejs 에서 자바 script 형식 으로 제공 하 는 모듈.
d)제3자 모듈 은 제3자 가 제공 하 는 모듈 이다.
우 리 는 먼저 builtin module 과 native module 의 생 성 과정 을 본다.
native JS module 의 생 성 은 상대 적 으로 복잡 합 니 다.컴 파일 후/out/release/obj/gen 디 렉 터 리 에 node 를 생 성 합 니 다.natives.h。
이 파일 은 js2c.py 에서 생 성 되 며,Nodejs 소스 코드 의 lib 디 렉 터 리 에서 모든 js 파일 을 ASCII 코드 로 변환 하여 해당 배열 에 저장 합 니 다.
builtin C+module 생 성 과정 이 상대 적 으로 간단 합 니 다.builtin C++의 모듈 입 구 는 매크로 NODE 를 통과 합 니 다.MODULE_CONTEXT_AWARE_BUILTIN 은 tcp 와 같은 func 로 확장 합 니 다.wrap 모듈 의 경우 static void register 로 확 장 됩 니 다.tcp_wrap()attribute(constructor)함수.
GCC 를 잘 아 는 친구 들 은 attribute(constructor)수식 함 수 는 Nodejs main()함수 이전에 실 행 됩 니 다.즉,builtin C+module 은 main()함수 전에 modlist 로 불 러 옵 니 다.builtin 목록,modlistbuiltin 은 struct nodemodule 형식의 포인터,getbuiltin_module()은 우리 가 필요 로 하 는 모듈 을 두루 찾 습 니 다.
사실 naive JS module 이 든 builtin C+module 이 든 최종 적 으로 실행 가능 한 파일 로 컴 파일 되 어야 합 니 다.이들 의 추출 방식 은 크게 다르다.js module 은 process.binding(natives)을 사용 하고 C+module 은 get 을 직접 사용한다.builtin_module()。
node.cc 에 binding()함 수 를 제공 합 니 다.require()를 사용 하여 다른 모듈 을 참조 할 때 binding()함수 가 도 입 됩 니 다.다음은 이 함 수 를 분석 해 보 겠 습 니 다.
함 수 는 주로 세 개의 모듈 서비스 인 builtin,constants,native 를 볼 수 있 습 니 다.
builtin 우선 순위 가 가장 높 으 면 modlistbuiltin 에서 찾 는 과정 은 매우 간단 합 니 다.전체 목록 을 옮 겨 다 니 며 같은 이름 의 모듈 을 찾 으 면 됩 니 다.찾 으 면 모듈 의 등록 함수 가 먼저 실 행 된 다음 데이터 exports 를 되 돌려 줍 니 다.
constants 모듈 우선 순위 다음으로 Nodejs 의 상수 정 의 는 constants 를 통 해 내 보 냅 니 다.
네 이 티 브 우선 순위 가 가장 낮다.
2.시작 과정 적용
위의 그림 은 하나의 프로 세 스 그림 으로 test.js 를 매개 변수 로 시작 하여 최종 적 으로 실 행 됩 니 다.전체 과정 은 4 단계 로 나 눌 수 있다.
1.실행 가능 한 파일 node:node 입 구 는 시작 과정 에서 환경 준비 작업 을 수행 합 니 다.
2.src/node.js:스 크 립 트 시작
3.Native Module:module.js 의 실행 을 위 한 준비 작업
4.module.js:native module,프로그램 불 러 오기,컴 파일,실행
의존 모듈 을 불 러 오 는 방법 적용
앞에서 언급 한 NativeModule.require()는 natives module 을 인용 하 는 데 만 도움 을 주 는 것 으로 lib/module.js 에 있어 서 충분 합 니 다.
그러나 일반적인 응용 은 matives module 뿐만 아니 라 제3자 모듈 도 인용 해 야 한 다 는 것 이 분명 하 다.module.js 의 Module.prototype.require()함수 중.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Nodejs 모듈 불 러 오기 운행 원리builtin C+module 생 성 과정 이 상대 적 으로 간단 합 니 다.builtin C++의 모듈 입 구 는 매크로 NODE 를 통과 합 니 다.MODULE_CONTEXT_AWARE_BUILTIN 은 tcp ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.