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,646 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 モジュールの仕様上、同じモジュールで異なるバー ジョンのものを任意のコード中に利用可能なため、! モジュール側が固有名称をグローバル空間に作る仕組みは、! モジュールを読み込むバージョンとタイミング次第で、! 想定しないオブジェクトインスタンスがグローバルに割り当 てられる可能性がある。! ! 用途や理由が特別ではない限り、! モジュール側がグローバル領域にインスタンスを作り出すよ うな仕組みにしないほうがよい。

×