2015年6月20日 星期六

NodeJS 的exports和require使用方式

當我們想要寫一個function或object給另一個js檔使用時,Node.JS根據CommonJS實現了exports和require來當作彼此之間的溝通方式。
而到幾有幾種寫法可以實現,依據需求有不同的寫法,已下提供幾個不同的寫法。


DEFINE A GLOBAL
建立全域函式,不建議使用
//globalFunc.js
globalFunc = function () {
 console.log('global Function');
}

//app.js
require('./globalFunc.js');
globalFunc(); //global Function 

EXPORT AN ANONYMOUS FUNCTION
建立匿名函式
//anonymousFunc.js
module.exports = function () {
 console.log('Anonymous Function');
}

//app.js
var anonymous = require('./anonymousFunc.js');
anonymousFunc();

EXPORT A NAMED FUNCTION
建立指定名稱函式
//nameFunc.js
exports.nameFunc = function () {
 console.log('name Function');
}

//app.js
var nameFunc = require('./nameFunc.js').nameFunc;
nameFunc();

EXPORT AN ANONYMOUS OBJECT
建立匿名物件,並呼叫函式
//anonymousObject.js
var AnonymousObject = function () {};
AnonymousObject.prototype.output = function () {
 console.log('Anonymous Object');
};
module.exports = new AnonymousObject();

//app.js
var anonymousObject = require('./anonymousObject.js');
anonymousObject.output();

EXPORT A NAMED OBJECT
建立指定物件,並呼叫函式
//nameObject.js
var NameObject = function () {};
NameObject.prototype.output = function () {
 console.log('Name Object');
};
module.exports.DefinedObject = new NameObject();

//app.js
var object = require('./nameObject.js').DefinedObject;
object.output();

EXPORT AN ANONYMOUS PROTOTYPE
引入一個原型,建立指定物件,並呼叫函式
//anonymousPrototype.js
var AnonymousPrototype = function () {};
AnonymousPrototype.prototype.output = function () {
 console.log('Anonymous Prototype');
}
module.exports = AnonymousPrototype;

//app.js
var AnonymousPrototype = require('./anonymousPrototype.js');
var anonymousObject = new AnonymousPrototype();
anonymousObject.output();

EXPORT A NAMED PROTOTYPE
引入指定原型,建立物件,並呼叫函式
//namePrototype.js
var NamePrototype = function () {};
NamePrototype.prototype.output = function () {
 console.log('Name Prototype');
};
module.exports.DefinedPrototype = NamePrototype;

//app.js
var Prototype = require('./namePrototype.js').DefinedPrototype;
var object = new Prototype();
object.output();

  1. var module = require( './module' );
  2. var module = require( './module.js' );
  3. var module = require( 'module' );
以上這三種方式有什麼不同呢?
  • (1)(2)是一樣的。因為./module 這個檔案自動尋找 ./module.js
  • (3)Node.js 會尋找叫做 module 的套件


module.exports和exports 有什麼不同呢?
  • module.exports = is the real object that been used
  • exports = is just a reference


參考來源:
http://darrenderidder.github.io/talks/ModulePatterns
http://zihua.li/2012/03/use-module-exports-or-exports-in-node/

0 意見:

張貼留言