2016-11-23 270 views
0

我試圖創建一個基於出來的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中的某個密鑰,我都會導入此模塊。問題在於,每次導入模塊時,訂戶對象都會重新初始化。

有沒有辦法做到留住用戶對象,不污染窗口?我認爲導入語句只會在第一次導入時執行一次文件。

謝謝。

+0

由於瀏覽器目前不支持模塊,您使用的是哪種打包系統? –

+0

Webpack + Babel + ES6模塊 –

+0

你能告訴你如何使用它嗎?所有進口應該共享相同的模塊狀態(當我在babel-node中測試時)。 –

回答

1

這是我的最終的監督。

我導入此模塊(資本)時做了一個錯字,我指定了錯誤的文件名。

有與等名稱的另一個模塊時的情況下被忽略。當在文件系統上進行編譯時,這種 可能會導致意外行爲,其他情況下的語義爲 。如果預計有多個模塊,則重命名模塊,如果需要一個模塊,則重命名模塊 。

這導致模塊重新初始化。

如果我錯了,請糾正我的錯誤,但是我相信一個模塊只會在整個應用程序中執行一次,而且是第一次導入的。

謝謝。