介绍

  • module:每个模块中都有 module 对象,存放了当前模块相关的信息;
  • module.exports:模块导出的内容;
  • exports:默认情况下,exportsmodule.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 的引用

【注意】使用 require() 导入模块 A 时,返回的结果是模块 A 中 module.exports 指向的值。这个也能通过源码中看出。

  • 暂时先记住这个结论,以后有机会研究 node.js 源码的时候再回来补充一下。
  • require() 源码解读

通过示例理解

示例一

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 falsetest { 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 = exportsmodule.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' }

画图说明

小结

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

最后

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

Node.js 中的 module.exports 与 exports相关推荐

  1. node.js中exports与module.exports的区别分析

    前言 关于Node.js中的exports和module.exports,很多时候都比较容易让人混淆,弄不清楚两者间的区别.那么我们就从头开始理清这两者之间的关系. 来源 在开发Node.js应用的时 ...

  2. node.js中模块_在Node.js中需要模块:您需要知道的一切

    node.js中模块 by Samer Buna 通过Samer Buna 在Node.js中需要模块:您需要知道的一切 (Requiring modules in Node.js: Everythi ...

  3. 如何在node.js中发出HTTP POST请求?

    如何在node.js中使用数据发出出站HTTP POST请求? #1楼 如果您使用请求库,这会变得更容易. var request = require('request');request.post( ...

  4. Node.js模块化开发||Node.js中模块化开发规范

    JavaScript开发弊端 a.js b.js JavaScript在使用时存在两大问题,文件依赖和命名冲突. 生活中的模块化开发 软件中的模块化开发 app.j user.一个功能就是一个模块,多 ...

  5. import export php,import与export在node.js中的使用方法

    import与export是es6中模块化的导入与导出,node.js现阶段不支持,需要通过babel进行编译,使其变成node.js的模块化代码.(关于node.js模块,可参考其他node.js模 ...

  6. 在Node.js中,如何从其他文件中“包含”函数?

    假设我有一个名为app.js的文件. 很简单: var express = require('express'); var app = express.createServer(); app.set( ...

  7. Node.js中的npm与包

    npm与包 一.包 1.包是什么? 2.包是干啥的? 3.包的下载 二.npm初体验 1.在项目中安装包的命令 2.eg:对时间格式化 3.安装指定版本的包 三.包管理配置文件 1.如何记录项目中安装 ...

  8. [转]JavaScript/Node.JS 中的 Promises

    JavaScript Promises 初体验 Promise 是什么? Promise 对象用来进行延迟(deferred) 和 异步(asynchronous) 计算. 一个 Promise 处于 ...

  9. 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session

    1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...

最新文章

  1. 这个逆袭的新同事,也太牛逼了
  2. python使用fpdf生成pdf文件章节(chapter),包含:页眉、页脚、章节主题、数据排版等;
  3. UA MATH567 高维统计II 随机向量4 Frame、凸性与各向同性
  4. oracle简单序列,-30天下载
  5. 基于RTMP实现Linux|麒麟操作系统下屏幕|系统声音采集推送
  6. FileInfo类 c# 1614533684
  7. 电热耦合_作者特稿︱电网运行环境下基于电热耦合潮流的架空线路应力预估
  8. OKHTTP好文推荐
  9. ORACLE 中NUMBER类型默认的精度和Scale问题
  10. android jni示例_Android动画示例
  11. 凸优化有关的数值线性代数知识 1矩阵结构与算法复杂性
  12. leetcode 927. 三等分
  13. 【内网学习笔记】14、发现主机缺失补丁
  14. 斐波那契常见规律(总结)
  15. android 读取wps_Android 默认使用wps打开本地文档
  16. win10笔记本触摸板点击没反应
  17. 一个更好的可视化微服务架构的方式
  18. Linq语句集成查询
  19. HTML---- 渐变颜色, P强制不换行、自动换行、强制换行
  20. 风机变速箱_1.5MW风机变速箱维修成本分析

热门文章

  1. [项目管理入门系列] 师傅领进门-------项目运作的一般流程(四)
  2. docker安装gogs
  3. 6.Linux实用操作(1)
  4. Docker容器间的网络通信
  5. 独家分享|中石化、伊利、宝洁三大行业巨头数字化实战秘笈
  6. 联想笔记本电池设置只充到60%
  7. 中国首份OCR白皮书出炉,基于深度学习的OCR已成主流-1
  8. iphone android选择,为什么有人宁愿选择二手iPhone也不愿购买新安卓,原因终于找到了!...
  9. 逻辑回归对信用卡欺诈进行分析
  10. c语言中cr有啥作用,C语言中lt;CRgt;是什么意思?