私はlocalStorageをベースにした簡単なpub-subシステムを作成しようとしていました。このプロセスにより、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モジュール –
あなたはそれをどのように使っているのかを教えてもらえますか?そのすべてのインポートは、同じモジュール状態を共有している必要があります(また、私がbabel-nodeでテストするときはそうです)。 –