我正在使用webpack捆綁我的JS,因此我可以在服務器和客戶端上使用它。我發現困難的一件事是在兩個地方都使用一個獲取對象。在服務器端,有節點獲取重用ES6獲取對象
import fetch from 'node-fetch';
和客戶端我沒有導入任何東西,應使用window.fetch
對象。
有沒有辦法有條件地導入獲取對象,所以它使用服務器端與node-fetch
,並使用客戶端與window.fetch
?
我已經試過這樣:
if(window == null) {
import fetch from 'node-fetch';
}
但進口必須是 '頂級'
我也試過變異抓取對象,如果窗口存在:
import fetch from 'node-fetch';
if(window) fetch = window.fetch;
但獲取變爲只讀。
是否有解決方法?目前我有兩個文件一個導入和一個沒有(分別爲服務器/客戶端),但我想避免重複的代碼。
你不想捆綁客戶端的js庫和服務器的js庫一起,因爲客戶端的js庫對客戶是可見的。 – lonelyloner
你可以使用'var fetch = window.fetch'這樣的東西來替換'import'語句(https://www.npmjs.com/package/webpack-replace)。 –