node.js patterns of module export / require

16
Node.js patterns of module export / require 2014-02-08 Yosuke Kumakura / @kumatch

Upload: kumatch-kumatch

Post on 24-May-2015

1.588 views

Category:

Technology


5 download

DESCRIPTION

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

TRANSCRIPT

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 patternshttps://github.com/nodejs-osaka/module-patterns

Static methods / Constant

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

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

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

var result = calc.add(10, 20);

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 Calculator = require(‘./calc’);!

var calc = new Calculator();var result = calc.add(10, 20);

Builder / Factory

module.exports = function () { return { add: function (a, b) { } };}

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

var calc = calcBuilder();var result = calc.add(10, 20);

Namespaces

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

var calc = require(‘./namespace’).calc!

var result = calc.add(10, 20);

Singleton

var caches = {};exports.set = function (key, value) { };exports.get = function (key) { };

var cache = require(‘./cache’);!

var item = cache.get(“item”);

Global declaration

calc = { add: function () { } sub: function () { }}

require(‘./calc’);!

var result = calc.add(10, 20);

Global declaration 2

var calc = { add: function () { }};!

Object.defineProperty( Object.prototype, 'calc', { get: function() { return calc; } });

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