[英]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.