2015-04-06 2 views
0

Я понимаю, что модули CommonJS предназначены для загрузки один раз. Допустим, у нас есть приложение с одной страницей с навигацией на основе хэшей, когда мы переходим на ранее загруженную страницу, код не перезапускается, поскольку он уже загружен один раз, и это то, что мы хотим.Перезагрузка/повторная инициализация/обновление модулей CommonJS

Как я могу загрузить содержимое модуля, как если бы он еще не был инициализирован? Например, если у меня есть некоторые данные в локальном хранилище, которые меняются, как я могу запустить функцию для обновления этих данных и/или что было бы лучшим способом обновить эти данные в ранее загруженном модуле?

+1

Просто есть модуль возвращает функцию, которая возвращает вещь вы хотите обновить, затем вызовите эту функцию, когда вам это нужно. Имеют смысл? – m59

+0

er думаю так, я дам ему попробовать кричать мне, если у найду пример. Thx – saj

+0

http://runnable.com/VSHpLtbzq6dQTCw7/sdfsdf-for-node-js-and-hello-world – m59

ответ

1

Вместо того, чтобы напрямую экспортировать содержимое вашего модуля, вы можете просто обернуть его в функцию, а затем вызвать эту функцию каждый раз, когда вам нужно это содержимое. Я использую этот шаблон для любой инициализации, которая может понадобиться модулю. Вот простой (и глупо) пример:

// this module will always add 1 to n 
module.exports = function(n) { 
    return 1 + n; 
} 

против:

module.exports = function(n1) { 
    // now we wrapped the module and can set the number 
    return function(n2) { 
    return n1 + n2; 
    } 
}; 

var myModule = require('that-module')(5); 
myModule(3); // 8 

И еще один пример, который содержит изменяющуюся данные:

// ./foo 
module.exports = { 
    foo: Date.now() 
}; 

// ./bar 
module.exports = function() { 
    return { 
    foo: Date.now() 
    }; 
}; 

// index.js 
var foo = require('./foo'); 
var bar = require('./bar'); 

setInterval(function() { 
    console.log(foo.foo, bar().foo); 
}, 500); 
Смежные вопросы