[英]Questions about node.js exports
我正在閱讀其他人的代碼,我看到了一段這樣的代碼
if ( typeof module === 'object' ) {
module.exports = BBB;
}
我想知道1)為什么在這里使用if語句2)在使用module.exports時,是否意味着所有BBB名稱空間都已導出
順便說一句,BBB是一個定義為
var BBB = {};
該模塊可能打算在瀏覽器和服務器端均可工作(大概使用node.js)。
為您的模塊創建一種包裝器,可以將其用於各種javascript加載器,例如AMD或RequireJS或CommonJS(由node使用)
我還建議您查看umdjs / umd (通用模塊定義)。 此回購記錄了如何為模塊創建包裝器,以便在目標環境中都可以使用它。
最后,您可以將module.exports
函數的返回值。 當有人導入模塊時,導出就是給他們的。
如果使用
// bbb.js
module.exports = BBB;
當需要使用模塊時(例如)
// otherfile.js
var BBB = require('./bbb');
BBB
將匹配導出的對象。
查看node.js模塊文檔以獲取更多常規幫助。
它是要檢測您所處的環境,模塊存在於節點中,而不存在於沒有瀏覽器或類似功能的瀏覽器中
作者很可能正在創建一個不一定在CommonJS環境中使用的模塊,但仍在為其提供支持。
CommonJS標准定義了一些自由變量, require
, exports
和module
。 module
必須是一個對象。
因此,當作者檢查module
是否為object
類型時,必須對CommonJS支持進行必要的檢查,然后將module.exports
分配給BBB
,以便在使用者require
時返回其模塊BBB
。 我不會詳細介紹CommonJS,但您可以查看標准以獲取更多信息。
為什么要檢查CommonJS支持?
因為您的代碼旨在用於多個環境/打包程序。 例如,Browserify和Webpack使用CommonJS標准打包用於瀏覽器的代碼。 但是在為瀏覽器創建API時,應該假設使用者可能沒有使用CommonJS,因此將不會定義module
並為module
分配值module.exports
將引發錯誤。
1)這將檢查您是否在服務器端(NodeJS)上使用此代碼。
2)是的,所有BBB名稱空間均已導出
以下是所有必要的信息: http : //www.sitepoint.com/understanding-module-exports-exports-node-js/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.