소개 및 정보
Node.js의 공식 API를 통해 Node.js 자체가 많은 핵심 모듈 http://nodejs.org/api/을 제공한다는 것을 알 수 있습니다. 이러한 코어 모듈은 이진 파일로 컴파일되며 ( 'module name')를 요구하여 얻을 수 있습니다. 코어 모듈은로드 우선 순위가 가장 높습니다 (모듈이 있고 이름이 같은 코어 모듈이있을 때 반영됩니다)
(이번에는 주로 사용자 정의 모듈에 대해 이야기합니다)
Node.js는 또한 파일 모듈 인 모듈 유형이 있으며, 이는 JavaScript 코드 파일 (.js 파일 접미사로.
파일 모듈 액세스 방법은 요구 사항 ( '/filename.suffix') require ( './ filename.suffix') requrie ( '../ filename.suffix')를 통해 액세스하고 파일 접미사를 생략 할 수 있습니다. "/"로 시작하여 "./"부터 시작하여 "../"부터 시작하여 상대 경로를로드하고 "./"로 시작하는 것을 의미합니다.
앞에서 언급 한 파일 접미사는 생략 할 수 있습니다. nodejs가로드하려는 우선 순위 JS 파일> JSON 파일> 노드 파일
사용자 정의 모듈을 만듭니다
카운터를 예로 들어보십시오
코드 사본은 다음과 같습니다.
var outputVal = 0; // 출력 값
var 증분 = 1; //증가
/* 출력 값 설정*/
함수 seoutputVal (val) {
outputVal = val;
}
/* 증분 설정*/
함수 setIncrement (incrementVal) {
증분 = 증착;
}
/* 출력*/
함수 printnextCount ()
{
outputVal += 증분;
Console.log (outputVal);
}
함수 printoutputVal () {
Console.log (outputVal);
}
Exports.seoutputVal = seoutputVal;
Exports.setIncrement = setIncrement;
module.exports.printnextCount = printnextCount;
사용자 정의 모듈 샘플 소스 코드
예제의 초점은 내보내기 및 모듈입니다. 외부 액세스 인터페이스를 제공합니다. 효과를보기 위해 그것을 부르자.
사용자 정의 모듈을 호출합니다
코드 사본은 다음과 같습니다.
/*
Node.js 파일은 JavaScript 코드, JSON 또는 컴파일 된 C/C ++ 확장자 일 수있는 모듈입니다.
두 가지 중요한 개체 :
필수는 외부에서 모듈을 얻는 것입니다
내보내기 모듈 인터페이스를 노출시킵니다
*/
var counter = require ( './ 1_modules_custom_counter');
console.log ( '모듈에 대한 첫 번째 호출 [1_modules_custom_counter]);
counter.seoutputVal (10); // 10부터 시작하는 계산을 설정합니다
Counter.setIncrement (10); // 증분을 10으로 설정합니다
counter.printnextCount ();
counter.printnextCount ();
counter.printnextCount ();
counter.printnextCount ();
/*
동일한 모듈에 대한 호출이 여러 번 반복적으로로드되지 않습니다.
*/
var counter = require ( './ 1_modules_custom_counter');
console.log ( '두 번째 호출 모듈 [1_modules_custom_counter]');
counter.printnextCount ();
사용자 정의 모드 호출 소스 코드
실행하고 수출 및 모듈을 통해 대중에게 노출 된 두 가지 방법에 액세스 할 수 있음을 찾으십시오!
예에서 볼 수 있듯이 ( './ 1_Modules_Custom_Counter')를 요구하여 모듈을 두 번받습니다.
그 이유는 Node.js가 요구 사항에 대한 Quirequire를 통해 동일한 모듈을 여러 번 호출하고 반복적으로로드되지 않기 때문입니다. node.js는 파일 이름에 따라로드 된 모든 파일 모듈을 캐시하므로 다시로드되지 않습니다.
참고 : Filename을 통한 캐싱은 실제 파일 이름을 말하며 들어오는 경로가 다르기 때문에 다른 파일로 간주되지 않습니다.
1_modules_custom_counter 파일에는 printoutputVal () 메소드가 있으며,이 내보내기 또는 module.exports를 통해 공개 액세스 방법을 제공하지 않습니다.
1_modules_load 파일에 직접 액세스하면 어떻게됩니까?
대답은 다음과 같습니다. typeerror : 객체 #<오브젝트> 방법이 없습니다. 'printoutputval'
수출과 모듈의 차이
위의 예를 통해 내보내기와 모듈 모두 액세스 할 수 있습니다! 둘 다 효과를 달성 할 수 있으므로 약간의 차이가 있어야합니다 ~~~ 예를 들어 보겠습니다!
코드 사본은 다음과 같습니다.
var 카운터 = 0;
Exports.printnextCount = function () {
카운터 += 2;
Console.log (카운터);
}
var iseq = (Exports === module.exports);
Console.log (ISEQ);
2_modules_diff_exports.js 파일 소스 코드
새 2_modules_diff_exports_load.js 파일을 만들어 호출하겠습니다
코드 사본은 다음과 같습니다.
var counter = require ( './ 2_modules_diff_exports');
counter.printnextCount ();
호출 후 실행 결과는 위의 그림과 같습니다.
2_modules_diff_exports_load.js 파일에서 ISEQ의 값을 출력합니다 (var iseq = (Exports === module.exports);).
추신 : 세 가지 동일한 징후가 있습니다. 정보를 직접 찾고있는 것을 모른다면!
결론을 내리기 위해 서두르지 말고이 두 JS 파일을 해당 모듈 코드로 변경하십시오.
코드 사본은 다음과 같습니다.
// 수정 된 2_modules_diff_exports.js 소스 코드는 다음과 같습니다
var 카운터 = 0;
module.exports = function () {
카운터 += 10;
this.printnextCount = function ()
{
Console.log (카운터);
}
}
var iseq = (Exports === module.exports);
Console.log (ISEQ);
코드 사본은 다음과 같습니다.
// 수정 된 2_modules_diff_exports_load.js 파일 소스 코드는 다음과 같습니다
var counter = require ( './ 2_modules_diff_exports');
var coundobj = new Counter ();
counterobj.printnextCount ();
호출 후 실행 결과는 위의 그림과 같습니다.
2_modules_diff_exports_load.js 파일 (var iseq = (Exports === module.exports);)에서 ISEQ의 값을 출력하고 이전에 얻은 결과와 일치하지 않습니다.
추신 : Counter.printnextCount ()를 사용하지 마십시오. 액세스하려면 오류 프롬프트 만 얻을 수 있습니다
API는 설명을 제공합니다
http://nodejs.org/api/modules.html
내보내기는 모듈에 대한 참조입니다. exports는 증강에만 적합합니다. 생성자와 같은 단일 항목을 내보내는 경우 대신 Module.Exports를 사용하고 싶습니다.
내보내기는 Module.Exports에 대한 주소 참조 일뿐입니다. nodejs는 모듈의 포인터 만 내보내며 exports 만 내 보냅니다. 수출 포인터가 변경되면 수출이 Module.Exports를 가리키지 않으므로 다시 내보내지 않습니다.
다른 이해를 참조하십시오.
http://www.hacksparrow.com/node-js-exports-vs-module-exports.html
http://zihua.li/2012/03/use-module-exports-or-exports-in-1ode/
Module.exports는 실제 인터페이스이며 내보내기는 보조 도구 일뿐입니다. 통화로의 최종 반환은 내보내기 대신 Module.Export입니다.
내보내기에 의해 수집 된 모든 속성 및 메소드는 Module.Exports에 할당됩니다. 물론, 이에 대한 전제 조건이 있습니다. 즉, Module.exports 자체에는 속성이나 방법이 없습니다.
Module.Exports에 이미 일부 속성과 방법이있는 경우 수출에 의해 수집 된 정보는 무시됩니다.
내보내기 및 module.exports 재정의
위의 내용은 기본적으로 내보내기와 모듈의 관계와 차이를 이해하지만 Exports와 Module.Exports가 모두 printNextCount () 메소드에 존재하는 경우 결과는 무엇입니까?
호출 결과
결과에서 알 수 있듯이 오류는 없으므로 이와 같이 정의 될 수 있지만 끝 모듈에서는 내보내기를 덮어 쓰기입니다.
결과는 오류 생산되지는 않지만 이와 같이 사용하면 필연적으로 개발에 문제가 있습니다.
1. 모듈을 정의하지 않는 것이 가장 좋습니다.
2.nodejs 개발자는 모듈을 권장합니다. exports는 개체를 내보내고 여러 방법과 변수를 내보내기 위해 내보내십시오.
다른...
API에는 제공된 다른 방법이 있으므로 자세한 내용은 없습니다. 위의 예를 바탕으로, 당신은 그것을 출력하자마자 혼자서 그것을 혼자서 알게 될 것입니다.
module.id
일반적으로 완전히 구문 분석 된 파일 이름 인 Type String의 모듈 식별자를 반환합니다.
module.filename
문자열 유형의 완전히 구문 분석 파일 이름을 반환합니다.
module.loaded
부하 유형을 반환하여 로딩이 완료되었는지 여부를 나타냅니다.
모듈
모듈을 참조하는 모듈을 반환합니다
모듈 .Children
이 모듈에서 참조하는 모든 모듈 개체 배열을 반환합니다.