簡體   English   中英

有關node.js導出的問題

[英]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標准定義了一些自由變量, requireexportsmodule 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM