Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Node.js!
patterns of module
export / require
2014-02-08!
Yosuke Kumakura / @kumatch
Yosuke Kumakura (kumatch)	

@kumatch	

Feedtailor inc.	

Current game: Hearthstone
Module code
module code 暗黙の宣言

var exports = module.exports = {};
module.exports の変更

exports = module.exports = function (foo) {	
// ….	
};
module.exports の変更

module.exports = 42;
Module patterns
https://github.com/nodejs-osaka/module-patterns
Static methods / Constant
exports.add = function (a, b) { };	
!

exports.sub = function (a, b) { };

var calc = require(‘....
Function
module.exports = function (a, b) { }

var add = require(‘./calc’);	
!

var result = add(10, 20);
Class constructor
function Calc () { }	
Calc.prototype.add = function (a, b) { };	
!

module.exports = Calc;

var Calculat...
Builder / Factory
module.exports = function () {	
return {	
add: function (a, b) { }	
};	
}

var calcBuilder = require(‘./...
Namespaces
exports.calc = {	
add: function (a, b) { },	
sub: function (a, b) { }	
};

var calc = require(‘./namespace’).ca...
Singleton
var caches = {};	
exports.set = function (key, value) { };	
exports.get = function (key) { };

var cache = requi...
Global declaration
calc = {	
add: function () { }	
sub: function () { }	
}

require(‘./calc’);	
!

var result = calc.add(1...
Global declaration 2
var calc = {	
add: function () { }	
};	
!

Object.defineProperty(	
Object.prototype, 'calc', {	
get: ...
※補足!
!

Node モジュールの仕様上、同じモジュールで異なるバー
ジョンのものを任意のコード中に利用可能なため、!
モジュール側が固有名称をグローバル空間に作る仕組みは、!
モジュールを読み込むバージョンとタイミング次第で、!
想定しな...
Upcoming SlideShare
Loading in …5
×

Node.js patterns of module export / require

2,766 views

Published on

2014-02-08 大阪 Node 勉強会 LT

Node.js patterns of module export / require

  1. 1. Node.js! patterns of module export / require 2014-02-08! Yosuke Kumakura / @kumatch
  2. 2. Yosuke Kumakura (kumatch) @kumatch Feedtailor inc. Current game: Hearthstone
  3. 3. Module code
  4. 4. module code 暗黙の宣言 var exports = module.exports = {};
  5. 5. module.exports の変更 exports = module.exports = function (foo) { // …. };
  6. 6. module.exports の変更 module.exports = 42;
  7. 7. Module patterns https://github.com/nodejs-osaka/module-patterns
  8. 8. Static methods / Constant exports.add = function (a, b) { }; ! exports.sub = function (a, b) { }; var calc = require(‘./calc’); ! var result = calc.add(10, 20);
  9. 9. Function module.exports = function (a, b) { } var add = require(‘./calc’); ! var result = add(10, 20);
  10. 10. Class constructor function Calc () { } Calc.prototype.add = function (a, b) { }; ! module.exports = Calc; var Calculator = require(‘./calc’); ! var calc = new Calculator(); var result = calc.add(10, 20);
  11. 11. Builder / Factory module.exports = function () { return { add: function (a, b) { } }; } var calcBuilder = require(‘./calc’); ! var calc = calcBuilder(); var result = calc.add(10, 20);
  12. 12. Namespaces exports.calc = { add: function (a, b) { }, sub: function (a, b) { } }; var calc = require(‘./namespace’).calc ! var result = calc.add(10, 20);
  13. 13. Singleton var caches = {}; exports.set = function (key, value) { }; exports.get = function (key) { }; var cache = require(‘./cache’); ! var item = cache.get(“item”);
  14. 14. Global declaration calc = { add: function () { } sub: function () { } } require(‘./calc’); ! var result = calc.add(10, 20);
  15. 15. Global declaration 2 var calc = { add: function () { } }; ! Object.defineProperty( Object.prototype, 'calc', { get: function() { return calc; } });
  16. 16. ※補足! ! Node モジュールの仕様上、同じモジュールで異なるバー ジョンのものを任意のコード中に利用可能なため、! モジュール側が固有名称をグローバル空間に作る仕組みは、! モジュールを読み込むバージョンとタイミング次第で、! 想定しないオブジェクトインスタンスがグローバルに割り当 てられる可能性がある。! ! 用途や理由が特別ではない限り、! モジュール側がグローバル領域にインスタンスを作り出すよ うな仕組みにしないほうがよい。

×