我正試圖撰寫一個用于服務器和客戶端的軟體包,并盡可能少地進行修改。
有些庫是 Node 的一部分,但不包括在瀏覽器中,有些庫在瀏覽器中可用,但不在 Node 中。
例如,使用https://github.com/lmaccherone/node-localstorage,我想在 Node 上require該庫,但在瀏覽器中,localStorage 已經可用。
我想通過在https://stackoverflow.com/a/65755447/2875404中找到的宣告陳述句來檢查localStorage是否可用,所以它看起來像:
declare var localStorage: any | undefined;
if (typeof localStorage == "undefined" || localStorage === null) {
console.log(" need to use Node localStorage")
var LocalStorage = require('node-localstorage').LocalStorage。
var localStorage = new LocalStorage('./localStorage')。
} else {
console.log("using Browser localStorage" )
}
在webpack中封裝好軟體包后,為了進行測驗,在Chrome瀏覽器片段中運行它,"需要使用Node localStorage"訊息在控制臺中彈出。如果我手動將 webpack 的代碼編輯為 console.log(localStorage),它實際上確實列印了 localStorage(所以它必須存在)--此外,當我洗掉整個 if (typeof... 塊時,訪問 localStorage 的代碼似乎運行正常。
我到底需要做什么來使這個 "混合決定 "的功能發揮作用?這是否與webpack以某種方式將東西放入一個 "更深 "的范圍有關,該范圍不能訪問諸如localStorage之類的視窗變數?但是,為什么那時可以列印并與該類互動呢?我很疑惑。
uj5u.com熱心網友回復:
正如我在評論中所說,你可以使用全域的window來檢查你是否在瀏覽器背景關系中:
declare var localStorage: any | undefined;
if (typeof window == 'undefined') {
console.log(" need to use Node localStorage")
var LocalStorage = require('node-localstorage').LocalStorage。
var localStorage = new LocalStorage('./localStorage')。
} else {
console.log("using Browser localStorage" )
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/320679.html
標籤:
