我正在嘗試使用 CommonJs 模塊,該模塊根據是否module和module.exports是否未定義有條件地匯出變數。我目前遇到的問題是有時當我使用import { something } from 'themodule'它時會給我 undefined something。在查看源代碼時,我發現了以下匯出條件:
if (typeof module !== 'undefined' && module.exports) {
module.exports = Prism;
}
所以我在檔案中添加了一些日志以查看條件是否滿足通過:
console.log('module: ', module, 'module.exports: ', module.exports)
if (typeof module !== 'undefined' && module.exports) {
console.log('module.exports!')
module.exports = Prism;
}
然而,這給了我奇怪的輸出:
模塊:{匯出:[Getter/Setter]} module.exports:未定義
正如你所看到的,module日志似乎表明它有一個exports屬性,但是當module.exports單獨記錄時,它說它是未定義的。這怎么可能 ?有人可以幫助理解為什么需要進行此檢查以及為什么有時module.exports可以未定義嗎?謝謝!
uj5u.com熱心網友回復:
這里有一些幾乎不相關的問題。
我目前遇到的問題是,有時當我使用 import { something } from 'themodule' 時,它會給我一些未定義的東西
如果您的import鏈中有回圈依賴,就會發生這種情況。如果 a.js 從 b.js 匯入,b.js 從 c.js 匯入,c.js 從 a.js 匯入 - 那么,對于在這些模塊的頂層運行的代碼,不能保證代碼運行在其他模塊的頂層已經執行。雖然您可以嘗試并查看發生了什么,但更好的方法是
- 洗掉回圈依賴,和/或
- 在您的代碼中只有一個入口點,從中呼叫所有其他有意義的東西,這樣下游的回圈依賴就不會引起問題 - 讓您的下游匯出是functions,而沒有依賴于其他匯入的頂級代碼。
然而,這給了我奇怪的輸出:
module: { exports: [Getter/Setter] } module.exports: undefined
這意味著:
- 該
exports屬性是一個 getter/setter - 當您呼叫 getter 時,它顯然回傳了
undefined. 該屬性存在,但呼叫 getter 不會回傳任何內容。例如
const obj = {
get prop() {
}
};
console.log(obj.hasOwnProperty('prop'));
console.log(obj.prop);
有人可以幫助理解為什么需要進行此檢查嗎
的檢查
if (typeof module !== 'undefined' && module.exports) {
只是檢查代碼是否正在 CommonJS 背景關系中執行,如果是,則將 分配Prism給匯出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/400238.html
標籤:javascript 节点.js 常见的 ecmascript-下一个
上一篇:如何驗證兩個joi架構物件
