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의 해체 값을 통해 함수의 인용을 직접 얻는 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Express.js에서 오류를 처리하는 간단한 방법Express에서 오류를 처리하는 여러 가지 방법이 있습니다. 이를 수행하는 일반적인 방법은 기본 익스프레스 미들웨어를 사용하는 것입니다. 또 다른 방법은 컨트롤러 내부의 오류를 처리하는 것입니다. 이러한 처리 방식...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.