簡體   English   中英

在不使用模塊/導出的情況下在 JavaScript 文件之間共享全局

[英]Sharing global between JavaScript files without using modules/exports

我在一個文件中有一個自包含的 JavaScript 函數,在另一個文件中有一些 Mocha BDD 測試,這些測試使用 [nodejs] require() 引用它。 所以在我測試的函數中,我使用module.exports導出。 在 IDE/build.ini 中,這一切都很好。

現在我測試的函數實際上是一個外部虛擬端點,當部署到雲實例中時,它在不支持導出或模塊的 JSVM 沙箱 (Otto) 中獨立運行,並且是基於 ES5 的(但它確實嵌入了一個版本的下划線庫)。 如果我在部署到雲時將 nodejs 模塊定義留在那里,它會在運行時引發錯誤(因為 Otto 無法識別模塊)。 所以我想刪除它,並使用一些 vanilla JS 機制來鏈接回 Mocha 測試和測試運行器。

所以我的問題是,如果我不能使用nodejs or requirejs模塊,我如何將一個文件中的 Mocha 測試鏈接到另一個文件中的 JS 函數? 我想在被測試的文件中放置一個函數閉包(大多數模塊實現使用),Otto 對此很滿意,因為它的 vanilla JS,但文件中具有全局范圍的任何變量在我的測試中仍然不可見文件,所以沒有鏈接。

有什么想法嗎?

快速瀏覽一下 Otto 文檔,看起來 Otto 只想要整個文件,並且(如您所說)不從 node.js 中識別 commonjs 模塊。

如果您有很多文件,我建議將它們與 webpack/browserify/etc 捆綁到一個文件中,這是大多數人轉換模塊以在瀏覽器中使用的方式,同樣,如果沒有工具,瀏覽器也無法識別 commonjs 模塊。

或者,您可以將所有module.exports轉換為簡單的var聲明,將文件連接在一起並希望您沒有命名沖突。

我在文檔中沒有看到任何關於訪問windowglobal對象以掛起全局對象的內容,這限制了您的選擇

我的一位同事提出了一個建議,如果您在 Nodejs 下運行,則在被測試的文件中使用閉包,該文件被部署到雲實例中,並有條件地進行導出。 我在下面添加了一個小的匿名閉包來做到這一點,Otto 沒有抱怨。

(function () {
    if (typeof module != 'undefined') {
        module.exports = pdp_virtual_endpoint;
    }
}());

不知道為什么我沒有早點考慮這個:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM