有关node.js导出的问题

时间:2015-07-04 01:40:42

标签: javascript node.js

我正在阅读其他一些代码,我看到了一段像这样的代码

if ( typeof module === 'object' ) {
    module.exports = BBB;
}

我在想 1)为什么在这里使用if语句 2)使用module.exports时,是否意味着导出所有BBB名称空间

BTW,BBB是一个定义为

的命名空间
var BBB = {};

4 个答案:

答案 0 :(得分:1)

该模块很可能适用于浏览器和服务器端(可能使用node.js)。

为您的模块创建一种包装器允许它在各种JavaScript加载器中使用,例如AMD或RequireJS或CommonJS(由节点使用)

我还建议查看umdjs/umd(通用模块定义)。此repo记录了如何为模块创建包装器,以便它可以在您定位的每个环境中工作。

最后,您可以将module.exports视为函数的返回值。当有人导入模块时,导出就是给他们的。

如果使用

// bbb.js
module.exports = BBB;

当使用(例如)

需要模块时
// otherfile.js
var BBB = require('./bbb');

BBB将匹配导出的对象。

查看node.js module docs以获取更多常规帮助。

答案 1 :(得分:1)

它是检测你所处的环境,模块存在于节点中,但没有浏览器中没有浏览器之类的

答案 2 :(得分:1)

作者很可能正在创建一个可能不一定在CommonJS环境中使用的模块,但仍然提供支持。

CommonJS标准定义了一些自由变量,requireexportsmodulemodule必须是对象。

因此,当作者检查module类型为object时,他们必须检查CommonJS支持,然后他们将module.exports分配给BBB,以便当消费者require的模块BBB被返回时。我不会详细介绍CommonJS,但您可以查看standard了解更多信息。

为什么要检查CommonJS支持?

因为您的代码适用于多个环境/打包器。例如Browserify和Webpack使用CommonJS标准打包代码以便在浏览器中使用。但是,当为浏览器创建API时,应该假设消费者可能没有使用CommonJS,因此将不会定义module,并且为module.exports分配值将引发错误。

答案 3 :(得分:0)

1)这将检查您是否在服务器端使用此代码(NodeJS)。

2)是的,导出所有BBB名称空间

以下是所有必要信息:http://www.sitepoint.com/understanding-module-exports-exports-node-js/