NodeJS中module.exports和exports的区别
2021/10/1 14:10:54
本文主要是介绍NodeJS中module.exports和exports的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
NodeJS中module.exports和exports的区别
文章目录
- NodeJS中module.exports和exports的区别
- 前言
- 一、简单示例
- 1. 用 module.exports 导出
- 2. 用 exports 导出
- 二、区别
- 1.module.exports 和 exports 内置对象
- 2. require()到底指向那个内存空间
前言
在使用NodeJS时,我们经常会碰到module.exports和exports
,那他们到底有什么区别呢?
一、简单示例
1. 用 module.exports 导出
// module.js 文件 function Foo() { this.tag= "foo"; this.show = function() { console.log("show", this.tag); } }; module.exports = Foo;
在同目录下创建 test.js,内容如下:
// test.js 文件 var mod = require('./module.js'); console.log(mod) // 打印: [Function: Foo] var f = new mod(); f.show(); // 打印: "show foo"
2. 用 exports 导出
还是同一个 module.js 文件,但导出使用 exports
(1) 第一种导出方式 exports = Foo
// module.js 文件 function Foo() { this.tag= "foo"; this.show = function() { console.log("show", this.tag); } }; exports = Foo;
test.js文件,修改如下:
// test.js 文件 var mod = require('./module.js'); console.log(mod) // 打印: {}
竟然打印是空对象 { }
(2) 第二种导出方式 exports.foo = Foo
再次修改 module.js 文件
// module.js 文件 function Foo() { ... }; exports.foo = Foo;
执行 node test.js 后, 打印 { foo: [Function: Foo] }
二、区别
通过上面的示例,可以发现:
module.exports
返回的是当前模块本身,即 赋值的是什么类型,require(…) 得到的就是什么类型。
而exports
并不是这样。
1.module.exports 和 exports 内置对象
nodeJS 执行一个JS文件时,会给这个JS文件内置两个
exports
和module
对象
console.log(exports); // 输出: {} console.log(module); // 输出: Module {id: '.', path: 'xxx', ... exports: {}, ...} console.log(module.exports === exports); // 输出: true, 说明指向同一块内存空间
可见,module.exports
和 exports
默认都是一个空对象{ },都是指向同一块内存空间。
2. require()到底指向那个内存空间
//demo.js // 对 module.exports 和 exports 分别赋值为不同对象 module.exports = {name: 'module'}; exports = {name: 'exports'};
通过上面的赋值后,
module.exports
与exports
指向了两个不同的内存空间
在同一目录下创建 test.js,内容如下:
var demo = require('./demo'); console.log(demo);
执行后,打印: {name: ‘module’}
可见,require() 导出的内容是
module.exports
指向的内存空间, 而并非exports
的。
因此,当 module.exports 和 exports 指向不同的内存空间时,exports 的内容就会失效。
这篇关于NodeJS中module.exports和exports的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19vue2 开发移动端h5 使用那个ui框架比较好?-icode9专业技术文章分享
- 2024-11-19ReactJS结合TypeScript、Vite、Redux和TanStack (React Query) 实战教程
- 2024-11-19Vue3资料入门教程:零基础快速上手指南
- 2024-11-19Vue3资料:新手入门教程与实战指南
- 2024-11-19Vue资料:新手入门vue.js教程与实践指南
- 2024-11-19Vue资料:初学者入门指南
- 2024-11-18tcpdf可以等待vue动态页面加载完成后再生成pdf吗?-icode9专业技术文章分享
- 2024-11-16Vue3资料:新手入门必读教程
- 2024-11-16Vue3资料:新手入门全面指南
- 2024-11-16Vue资料:新手入门完全指南