在NodeJS中,我想簡單地執行一個文件並允許它修改全局名稱空間。我知道這不是最好的做法,如果我自己設計項目,我會確保每個模塊都導出一個變量。在全局範圍內執行文件而不是返回導出的對象
我正在將一個結構不好的SPA項目通過腳本標記加入到節點中,我想這樣做是漸進式的。
現在我有:
require('./three.js')
這是一個版本的threejs它只是填充名爲「三」與模塊的內容的全局變量。由於require的執行隱式地創建了一個閉包,所以不會爲我創建一個全局變量。
所以我想要做的就是運行一個完整的js文件,並允許它創建全局變量。
有沒有一個優雅的方式來做到這一點?
*「由於require的執行隱式地創建了一個閉包,所以沒有爲我創建一個全局變量。」*這真的取決於如何實現three.js。任何模塊都可以通過執行'global.foobar = 42'來向全局範圍添加內容。如果'three.js'正在輸出一個你想要的值,你可以用'global.THREE = require('...')'把它添加到全局對象中。 –
好點 - 這個版本的three.js期望通過腳本標籤連接到一個網頁,所以它沒有這個。如果我有一個單獨的模塊,它會被微不足道地添加,但這取決於30個以上的腳本標記,我不想改變它們,直到我可以逐漸測試何時打破它爲止。我做的第一件事是將所有內容都放入一個js文件中,而不是依賴於嵌入html的腳本。我將通過使用AMD友好版本替換每個模塊,但這是中間步驟。 – pixelpax
您不在全局名稱空間中運行node.js代碼。如果需要的話,任何節點模塊都可以直接訪問'global'對象來混淆全局名稱空間。爲什麼不這樣做呢?或者,更好的學習如何正確編程節點模塊和輸出,因爲這通常是更好的代碼編寫方式。 – jfriend00