[转载]module.exports 和 exports的区别

本文深入解析Node.js中module.exports与exports的区别,探讨两者在模块导出时的行为差异及背后的原因,帮助开发者理解如何正确使用这两种方式来导出模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载:module.exports 和 exports的区别

1. module.exports

CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。

function hello() {
    console.log('Hello, world!');
}

function world(name) {
    console.log('Hello, ' + name);
}

module.exports = {
    hello: hello,
    world: world
};

上面代码通过module.exports输出函数hello和world。

2. exports

function hello() {
    console.log('Hello, world!');
}

function world(name) {
    console.log('Hello, ' + name);
}

exports.hello = hello;
exports.world= world;

不可以直接对进行exports赋值:

exports = {
    hello: hello,
    world: world
};//这样代码不报错, 但是没有用, 接口并未暴露出来. 原因请看下面

3. 原因

首先,Node会把整个待加载的 .js文件放入一个包装函数load中执行。在执行这个load()函数前,Node事先准备好了module对象. module中有一个空的exports方法.

var load = function (exports, module) {
    // .js的文件内容
    ...
    // load函数返回:
    return module.exports;
};

var exported = load(module.exports, module);

那么为什么在自己的 .js 文件中写成exports = { … }会没有效果呢 ?

系统自动给nodejs 文件增加2个变量 exports 和 module, module 又有一个属性 exports, 这个exports 属性指向一个空对象 {}; 同时 exports这个变量也指向了这个空对象{};

于是就有了 exports => {} <=module.exports.

这2个exports **其实是没有直接关系的,唯一的关系是: 他们初始都指向同一个空对象{}; **
如果其中一个不指向做个空对象了, 那么他们的关系就没有了. 因此也就没有任何效果了.

4. 总结

因此如果是想要键值对象的这种格式, exports.text = …; 是可以的.
但如果是一个数组或者是函数. 只有module.exports = function(){ }有效.

因此, 不论任何时候都推荐用module.exports

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、COSO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析模拟,揭示了生物质炉具在实际应用中的优点挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值