node의 module.exports와 exports

3496 단어 node

module.exports와 exports의 차이


하나하나node.js 실행 파일은 모두module 대상을 자동으로 만듭니다. 또한module 대상은 exports라는 속성을 만듭니다. 초기화된 값은 {}입니다
module.exports = {};

Node.js는 기능 함수를 편리하게 내보내기 위해 node.js는 자동으로 다음과 같은 문장foo를 실현할 것이다.js
exports.a = function () {
  console.log('a')
}
var x =require('./foo');
console.log(x.a)

상기 코드의 재node에서 출력된 값은 다음과 같다. 1;exports가 실제로 인용한 것은module이다.exports의 값입니다.module.exports가 바뀔 때 exports는 바뀌지 않으며 모듈이 내보낼 때 실제 내보낸 실행은module입니다.exports가 아니라 exports입니다.다음 예:foo.js
exports.a = function(){
console.log('a')
}
//  
module.exports = {a: 2}
exports.a = 1

test.js
var x = require('./foo');
console.log(x.a);

상기 코드가 출력한 것은: 2;모듈이 내보낸 값이 모듈임을 증명했습니다.exports 대상;exports는module에 있습니다.exports가 변경되면 효력을 상실합니다.다음은 모듈을 예로 들겠습니다.exports와 exports의 일반적인 사용 방법:

module.exports = View

function View(name, options) { 
   options = options || {};
   this.name = name;
   this.root = options.root;
   var engines = options.engines;
   this.defaultEngine = options.defaultEngine;
   var ext = this.ext = extname(name);
   if (!ext && !this.defaultEngine) throw new Error('No default engine was specified and no         extension was provided.');
   if (!ext) name += (ext = this.ext = ('.' != this.defaultEngine[0] ? '.' : '') +     this.defaultEngine);
   this.engine = engines[ext] || (engines[ext] = require(ext.slice(1)).__express);
   this.path = this.lookup(name);
 }

 module.exports = View;

javascript에는 함수는 대상이고 View는 대상,module라는 말이 있다.export = View, 즉 전체 View 객체를 내보내는 것과 같습니다.외부 모듈이 그것을 호출할 때, View의 모든 방법을 호출할 수 있습니다.그러나 주의해야 할 것은 뷰의 정적 방법일 때(즉 뷰 대상에서 직접 확장된 속성)만 호출될 수 있고 그 원형prototype 대상에서 만드는 방법은 뷰에 속하는 개인적인 방법이다.
foo.js
function View (name, options) {
  this.name = name
  this.options = options
}

View.prototype.test = function () {
  console.log('test')
}

View.test01 = function () {
  console.log('test01')
}

module.exports = View

test.js
var x = require('./view.js')
console.log(x) // { [Function: View] test01: [Function] }
console.log(x.test) // undefined
console.log(x.test01) // [Function]
x.test01()  //  test01

위의 결과를 보면 View 원형의 테스트 방법은 다른 모듈에서 호출할 수 없습니다.

var app = exports = module.exports = {};


사실, 우리가 원리를 이해한 후에 이러한 쓰기 방법이 약간 불필요하다는 것을 이해하기 어렵지 않다. 사실은 모듈의 초기화 환경이 깨끗하다는 것을 보장하기 위해서이다.모듈이 바뀌어도 편리하다.exports가 가리키는 대상은 exports의 특성을 그대로 사용할 수 있습니다.
exports = module.exports = createApplication;

 /**
  * Expose mime.
  */

 exports.mime = connect.mime;

예에서module.exports = createApplication이 module을 변경했습니다.exports입니다. exports를 실효시킵니다. exports = module를 통해.exports의 방법으로 원래의 특징을 회복합니다.

exports.init= function(){}


이런 가장 간단한 방법은 바로 모듈 init를 내보내는 방법이다.init.js
exports.init = function () {
  console.log(' ')
}

test.js
var obj = require('./init')
obj.init()

testEs6.js
var { init } = require('./init')
init()

주의해야 할 것은 exports가 실제로 내보낸 대상은 {init:function() {}}이다.첫 번째는es5의 방법이다.두 번째는es6의 해체 값을 통해 함수의 인용을 직접 얻는 것이다.

좋은 웹페이지 즐겨찾기