繁体   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