Node.js 中的 module.exports 与 exports
介绍
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 的引用
【注意】使用
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' }
画图说明
小结
exports
是module.exports
的引用;- 对
exports
和module.exports
赋值时要格外注意,明确模块导出的值; - 使用
require()
导入模块 A 时,导入的结果是模块 A 中module.exports
指向的值。
最后
为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。
有需要的小伙伴,可以点击下方卡片领取,无偿分享
Node.js 中的 module.exports 与 exports相关推荐
- node.js中exports与module.exports的区别分析
前言 关于Node.js中的exports和module.exports,很多时候都比较容易让人混淆,弄不清楚两者间的区别.那么我们就从头开始理清这两者之间的关系. 来源 在开发Node.js应用的时 ...
- node.js中模块_在Node.js中需要模块:您需要知道的一切
node.js中模块 by Samer Buna 通过Samer Buna 在Node.js中需要模块:您需要知道的一切 (Requiring modules in Node.js: Everythi ...
- 如何在node.js中发出HTTP POST请求?
如何在node.js中使用数据发出出站HTTP POST请求? #1楼 如果您使用请求库,这会变得更容易. var request = require('request');request.post( ...
- Node.js模块化开发||Node.js中模块化开发规范
JavaScript开发弊端 a.js b.js JavaScript在使用时存在两大问题,文件依赖和命名冲突. 生活中的模块化开发 软件中的模块化开发 app.j user.一个功能就是一个模块,多 ...
- import export php,import与export在node.js中的使用方法
import与export是es6中模块化的导入与导出,node.js现阶段不支持,需要通过babel进行编译,使其变成node.js的模块化代码.(关于node.js模块,可参考其他node.js模 ...
- 在Node.js中,如何从其他文件中“包含”函数?
假设我有一个名为app.js的文件. 很简单: var express = require('express'); var app = express.createServer(); app.set( ...
- Node.js中的npm与包
npm与包 一.包 1.包是什么? 2.包是干啥的? 3.包的下载 二.npm初体验 1.在项目中安装包的命令 2.eg:对时间格式化 3.安装指定版本的包 三.包管理配置文件 1.如何记录项目中安装 ...
- [转]JavaScript/Node.JS 中的 Promises
JavaScript Promises 初体验 Promise 是什么? Promise 对象用来进行延迟(deferred) 和 异步(asynchronous) 计算. 一个 Promise 处于 ...
- 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session
1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...
最新文章
- 这个逆袭的新同事,也太牛逼了
- python使用fpdf生成pdf文件章节(chapter),包含:页眉、页脚、章节主题、数据排版等;
- UA MATH567 高维统计II 随机向量4 Frame、凸性与各向同性
- oracle简单序列,-30天下载
- 基于RTMP实现Linux|麒麟操作系统下屏幕|系统声音采集推送
- FileInfo类 c# 1614533684
- 电热耦合_作者特稿︱电网运行环境下基于电热耦合潮流的架空线路应力预估
- OKHTTP好文推荐
- ORACLE 中NUMBER类型默认的精度和Scale问题
- android jni示例_Android动画示例
- 凸优化有关的数值线性代数知识 1矩阵结构与算法复杂性
- leetcode 927. 三等分
- 【内网学习笔记】14、发现主机缺失补丁
- 斐波那契常见规律(总结)
- android 读取wps_Android 默认使用wps打开本地文档
- win10笔记本触摸板点击没反应
- 一个更好的可视化微服务架构的方式
- Linq语句集成查询
- HTML---- 渐变颜色, P强制不换行、自动换行、强制换行
- 风机变速箱_1.5MW风机变速箱维修成本分析
热门文章
- [项目管理入门系列] 师傅领进门-------项目运作的一般流程(四)
- docker安装gogs
- 6.Linux实用操作(1)
- Docker容器间的网络通信
- 独家分享|中石化、伊利、宝洁三大行业巨头数字化实战秘笈
- 联想笔记本电池设置只充到60%
- 中国首份OCR白皮书出炉,基于深度学习的OCR已成主流-1
- iphone android选择,为什么有人宁愿选择二手iPhone也不愿购买新安卓,原因终于找到了!...
- 逻辑回归对信用卡欺诈进行分析
- c语言中cr有啥作用,C语言中lt;CRgt;是什么意思?