Я пытался создать быструю систему pub-sub, основанную на localStorage. Этот процесс заставил меня понять, что мое понимание того, как работают модули ES6, является неполным.Модули ES6 - глобальные переменные
const subscribers = {};
export default {
subscribe (key, callback) {
if (!Array.isArray(subscribers[key])) {
subscribers[key] = [callback];
} else {
subscribers[key] = [...subscribers[key], callback];
}
},
publish (key, value) {
window.localStorage[key] = value;
subscribers[key].forEach(cb => cb(value));
}
};
Я импортировал этот модуль всякий раз, когда хотел подписаться/опубликовать ключ в localStorage. Проблема в том, что объект-подписчик получает повторный инициализацию каждый раз, когда модуль импортируется.
Есть ли способ сохранить объект подписчиков без загрязняющего окна? Я предположил, что оператор import выполнит файл только один раз, только когда он будет импортирован.
Спасибо.
Поскольку браузеры в настоящее время не поддерживают модули, какую систему упаковки вы используете? –
Webpack + Babel + ES6 Modules –
Можете ли вы показать, как вы его используете? Все импорты должны иметь одно и то же состояние модуля (и, когда я тестирую его в буфере памяти). –