Node.js中exports与module.exports区别

 更新时间:2025年07月08日 09:17:59   作者:觅_  
本文主要介绍了Node.js中exports与module.exports区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在 Node.js 中,exports 和 module.exports 都是用于模块导出的对象,但它们在引用关系和使用场景上有重要区别:

核心区别总结

特性 exports module.exports
本质 module.exports 的引用 模块最终导出的真实对象
初始化关系 exports = module.exports (初始指向同一对象) 模块实际导出的对象
直接赋值后果 断开引用(导出失效) 正确覆盖导出内容
适用场景 添加多个属性/方法 导出任意类型(函数/类/对象等)

详细解释

初始关系

Node.js 在编译模块时会隐式执行:

var module = { exports: {} }; // 真实导出对象
var exports = module.exports; // 初始指向同一内存地址

此时 exports 是 module.exports 的快捷引用,两者指向同一个空对象 {}。

正确用法

✅ 添加属性(两者等效)

// 方式一:使用 exports

exports.name = 'Alice';
exports.sayHi = () => 'Hello!';

// 方式二:使用 module.exports

module.exports.name = 'Bob';
module.exports.sayHi = () => 'Hi!';

⚠️ 此时 exports 和 module.exports 仍指向同一对象,导出内容相同。

✅ 导出特殊类型(必须用 module.exports)

// 导出构造函数
module.exports = class Person { ... };

// 导出函数
module.exports = function() { ... };

// 导出原始值
module.exports = 'Hello World';

错误用法

❌ 直接给 exports 赋值(引用断裂)

exports = { name: 'Charlie' }; // 错误!断开与 module.exports 的链接

此时 exports 指向新对象,但模块实际导出的是原始的 module.exports(仍是空对象 {})。

🚨 关键注意事项

最终导出的是 module.exports
无论操作 exports 还是 module.exports,模块最终返回的是 module.exports 的值。

赋值优先级
若同时操作两者,最后执行的赋值决定导出结果:

exports.a = 1;         // 无效:被下一行覆盖
module.exports = { b: 2 }; // 最终导出 { b: 2 }

📌 最佳实践建议

场景 推荐方式
导出多个属性/方法 exports.xxx = …
导出单一功能(函数/类/对象) module.exports = …
避免混淆 统一使用 module.exports

🌰 代码示例

正确导出函数

// ✅ 正确
module.exports = () => console.log('Imported!');

// ❌ 错误(exports 无法导出函数)
exports = () => console.log('This will fail!');

混合使用案例

exports.name = 'Alice';  // 有效:添加属性
module.exports.age = 30; // 有效:添加属性

// 最终导出 { name: 'Alice', age: 30 }
exports.name = 'Bob';
module.exports = { age: 25 }; // 覆盖之前的所有导出
// 最终导出 { age: 25 } (name 被丢弃)

💡 总结

使用 exports 添加属性,用 module.exports 覆盖导出对象。
永远不要直接赋值 exports(exports = …)。
当需要导出非对象类型(函数、字符串等)时,必须使用 module.exports。
不确定时,统一使用 module.exports 可避免意外错误。
理解两者引用关系的本质,能有效避免模块导出时的常见陷阱!

  • exports返回的是模块函数
  • module.exports返回的是 模块对象本身

到此这篇关于Node.js中exports与module.exports区别的文章就介绍到这了,更多相关Node.js exports module.exports内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • NodeJS感知和控制自身进程的运行环境和状态

    NodeJS感知和控制自身进程的运行环境和状态

    NodeJS可以感知和控制自身进程的运行环境和状态,也可以创建子进程并与其协同工作,这使得NodeJS可以把多个程序组合在一起共同完成某项工作,并在其中充当胶水和调度器的作用,和进程管理相关的API单独介绍起来比较枯燥,这里从一些典型的应用场景出发
    2024-01-01
  • koa2 用户注册、登录校验与加盐加密的实现方法

    koa2 用户注册、登录校验与加盐加密的实现方法

    这篇文章主要介绍了koa2 用户注册、登录校验与加盐加密的实现方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • 如何使用Node.js判断png图片是否存在透明像素

    如何使用Node.js判断png图片是否存在透明像素

    这篇文章主要给大家介绍了关于如何使用Node.js判断png图片是否存在透明像素的相关资料,文中将实现的原理以及代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • nodejs连接mysql数据库及基本知识点详解

    nodejs连接mysql数据库及基本知识点详解

    这篇文章主要介绍了nodejs连接mysql数据库,结合实例形式总结分析了nodejs连接与操作mysql数据库的相关模板、配置及mysql数据库查询、添加数据等操作技巧,需要的朋友可以参考下
    2018-03-03
  • vscode安装教程以及配置node.js环境全过程

    vscode安装教程以及配置node.js环境全过程

    这篇文章主要给大家介绍了关于vscode安装教程以及配置node.js环境的相关资料,VSCode是一款由微软开发的轻量级编辑器,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • 详解使用Nodejs内置加密模块实现对等加密与解密

    详解使用Nodejs内置加密模块实现对等加密与解密

    这篇文章主要介绍了使用Nodejs内置加密模块实现对等加密与解密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 解决npm install版本不匹配问题: npm ERR! code ETARGET npm ERR! notarget No matching version found for

    解决npm install版本不匹配问题: npm ERR! code ETARGET npm ERR! 

    这篇文章主要介绍了如何解决npm install版本不匹配问题: npm ERR! code ETARGET npm ERR! notarget No matching version found for,文中给出了详细的解决方法,需要的朋友可以参考下
    2024-02-02
  • centos 上快速搭建ghost博客方法分享

    centos 上快速搭建ghost博客方法分享

    本文给大家分享的是如何在centos上快速搭建基于Node.js 构建的开源博客平台ghost的方法,非常的实用,有需要的小伙伴可以参考下
    2018-05-05
  • NVM安装nodejs的方法实用步骤

    NVM安装nodejs的方法实用步骤

    安装node的方式有很多种,本文主要介绍了NVM安装nodejs的方法实用步骤,希望能帮助大家来解决问题,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • node.js中的buffer.Buffer.isEncoding方法使用说明

    node.js中的buffer.Buffer.isEncoding方法使用说明

    这篇文章主要介绍了node.js中的buffer.Buffer.isEncoding方法使用说明,本文介绍了buffer.Buffer.isEncoding的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12

最新评论