NodeJs-Lesson1-require和module.exports探究

2020-09-17 11:29:37 浏览数 (1)

require和module.exports探究

  • require和module.exports讲解
    • require
    • exports和module.exports探究
    • 留一个疑问?为什么exports和require都能直接使用,是全局变量吗?

require和module.exports讲解

代码语言:javascript复制
遵守开闭原则:对修改关闭,对扩展开放,所以要想使用引入的模块,子模块必须提供module.exports方法。否则只能运行子模块

require

  • 使用方法 var express = require(“express”);//引入系统模块可以直接引入 var test = require("./test.js");引入自己写的模块需要写相对路径或者绝对路径

exports和module.exports探究

  • 导出模块可以使用
代码语言:javascript复制
	var a = 123;
	var b = 'abc';
	exports.a = a;
	module.exports.b = b;

这里的两种方法都能导出该模块,并且,将该模块导出到一个对象当中 此处你是否有疑问呢?为何两个东西会导出到一个对象当中,还是说这两个对象是同一个对象呢?

代码语言:javascript复制
	console.log(exports == module.exports):

看到这个结果,确实是表示exports和module.exports是同一个对象

那我们再看看另外一种情况呢

代码语言:javascript复制
	var a = 123;
	bar b = 'abc';
	exports = a;
	module.exports = b;

再另一个js中去引入该模块

代码语言:javascript复制
	var test = require("./test.js");

这里打印的结果为abc;即使我们讲导出的顺序反过来,结果还是一样,这里就不再做示例了。 综上所述:我们可以得出一些结论:

  • exports和module.exports指向的是同一个对象。所以,我们分别再两个上面挂载对象导出时,值再同一个对象里面
  • 当我们再两个对象分别赋值新的对象以后,就只能导出其中一个,是因为我们改变了原来的指向,现在指向两个对象 ,我们只能导出module.exports。所以,刚刚看到的结果都是abc

留一个疑问?为什么exports和require都能直接使用,是全局变量吗?

0 人点赞