Node.js 中的 module.exports 与 exports区别介绍

 更新时间:2022年09月13日 14:34:52   作者:Chrislinlin  
这篇文章主要介绍了Node.js中的module.exports与exports区别介绍,每个模块中都有module对象,存放了当前模块相关的信息,更多相关内容需要的朋友可以参考一下

介绍

  • module:每个模块中都有 module 对象,存放了当前模块相关的信息;
  • module.exports:模块导出的内容;
  • exports:默认情况下,exports 和 module.exports 指向同一个对象。

示例

test.js

console.log('module', module)
console.log('module.exports', module.exports)
console.log('exports', exports)
console.log('module.exports === exports', module.exports === exports)

控制台执行 node test.js打印日志如下:

module Module {
  id: '.',
  path: 'E:\lin\webpack-learning\src\cjs\demo1',
  exports: {},
  filename: 'E:\lin\webpack-learning\src\cjs\demo1\test.js',
  loaded: false,
  children: [],
  paths: [
    'E:\lin\webpack-learning\src\cjs\demo1\node_modules',
    'E:\lin\webpack-learning\src\cjs\node_modules',
    'E:\lin\webpack-learning\src\node_modules',
    'E:\lin\webpack-learning\node_modules',
    'E:\lin\node_modules',
    'E:\node_modules'
  ]
}
module.exports {}
exports {}
module.exports === exports true

从源码中理解

github.com/nodejs/node…

const exports = this.exports;
const thisValue = exports;
const module = this;

说明:exports 是 module.exports 的引用

通过示例理解

示例一

test1.js

exports.name = 'lin';
module.exports.age = 18;

console.log('module.exports', module.exports)
console.log('exports', exports)
console.log('module.exports === exports', module.exports === exports)

index.js

const test = require('./test1')
console.log("test", test);

控制台执行 node index.js,打印日志如下:

module.exports { name: 'lin', age: 18 }
exports { name: 'lin', age: 18 }
module.exports === exports true 
test { name: 'lin', age: 18 }

画图说明:

示例二

test2.js

module.exports.name = 'lin'
exports = {
  name: 'myName',
  age: 6
}
console.log('module.exports', module.exports)
console.log('exports', exports)
console.log('module.exports === exports', module.exports === exports)

index.js 改为引入 test2.js 模块

const test = require('./test2')
console.log("test", test);

控制台执行 node index.js打印日志如下:

module.exports { name: 'lin' }
exports { name: 'myName', age: 6 }
module.exports === exports false
test { name: 'lin' }

画图说明:

示例三

test3.js

module.exports = {
  name: 'lin',
  age: 18
}

exports.name = "myName"
console.log('module.exports', module.exports)
console.log('exports', exports)
console.log('module.exports === exports', module.exports === exports)

index.js 改为引入 test3.js 模块

const test = require('./test3')
console.log("test", test);

控制台执行 node index.js打印日志如下:

module.exports { name: 'lin', age: 18 }
exports { name: 'myName' }
module.exports === exports false
test { name: 'lin', age: 18 }  

画图说明:

示例四

test4.js

exports = {
  name: 'lin',
  age: 18
}
module.exports = exports
module.exports.job = 'FE'
console.log('module.exports', module.exports)
console.log('exports', exports)
console.log('module.exports === exports', module.exports === exports)

index.js 改为引入 test4.js 模块

const test = require('./test4')
console.log("test", test);

控制台执行 node index.js打印日志如下:

module.exports { name: 'lin', age: 18, job: 'FE' }
exports { name: 'lin', age: 18, job: 'FE' }
module.exports === exports true
test { name: 'lin', age: 18, job: 'FE' }

画图说明:

小结

  • exports 是 module.exports 的引用;
  • 对 exports 和 module.exports 赋值时要格外注意,明确模块导出的值;
  • 使用 require() 导入模块 A 时,导入的结果是模块 A 中 module.exports 指向的值。

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

相关文章

  • Node.js编码规范

    Node.js编码规范

    编码规范比比皆是,但是很少有公司做好编码规范的。忍不住想谈谈编码规范的重要性,希望所有人都能够重视起来。
    2014-07-07
  • Node.js中readline模块实现终端输入

    Node.js中readline模块实现终端输入

    本文主要介绍了Node.js中readline模块实现终端输入,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 深入理解NodeJS 多进程和集群

    深入理解NodeJS 多进程和集群

    这篇文章主要介绍了深入理解NodeJS 多进程和集群,详细的介绍了什么是进程和进程的实现等,非常具有实用价值,需要的朋友可以参考下
    2018-10-10
  • NodeJS如何实现同步的方法示例

    NodeJS如何实现同步的方法示例

    nodeJS最大的特点就是其异步操作,下面这篇文章主要给大家介绍了关于NodeJS如何实现同步的方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-08-08
  • nodejs修复ipa处理过的png图片

    nodejs修复ipa处理过的png图片

    ipa本身是一个zip文件改后缀后解压缩就能看到应用内使用的资源文件,其中png图片资源xcode打包的时候做了些手脚下面我们来看看如何修复这些问题
    2016-02-02
  • 基于promise.js实现nodejs的promises库

    基于promise.js实现nodejs的promises库

    promise是JavaScript实现优雅编程的一个非常不错的轻量级框架。该框架可以让你从杂乱的多重异步回调代码中解脱出来,并把精力集中到你的业务逻辑上。
    2014-07-07
  • nodejs实现生成文件并在前端下载

    nodejs实现生成文件并在前端下载

    这篇文章主要介绍了nodejs实现生成文件并在前端下载,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 使用Nodejs编写一个脚本实现markdown转pdf功能

    使用Nodejs编写一个脚本实现markdown转pdf功能

    Markdown 是一种轻量级的标记语言,非常适合用来写作和记录,将 Markdown 转换为 PDF 可以让文档在格式和样式上更加统一,也方便在不同设备和平台上查看和打印,在接下来的内容中我们将讲解如何使用 NodeJs 编写一个 Markdown 转 PDF 的脚本来实现我们这个想要的功能
    2024-05-05
  • node 标准输入流和输出流代码实例

    node 标准输入流和输出流代码实例

    这篇文章主要介绍了node 标准输入流和输出流代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • nodejs实现聊天机器人功能

    nodejs实现聊天机器人功能

    这篇文章主要介绍了nodejs实现聊天机器人功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09

最新评论