node.js学习——Node模块系统,充分认识模块,模块的导入、导出。

前言: Node.js是成为一名优秀的前端开发工程师的必修课。Node.js中的模块是其应用程序的基本组成部分, 所以我们需要对Node中的模块系统有着清晰的认知与使用。

1. Node中的模块类别

1. 核心模块

Node为JS提供了很多的服务器级别的API,这些API被封装到了一个个具名的核心模块中去了。我们可以很方便的使用这些模块,来完成我们想要完成的需求以及功能。

2. 第三方模块

我们在使用node进行开发时,经常会引用第三方的模块,常见的第三方模块有:

  • 时间格式化模块dateformat
  • 路由模块 router
  • 模板插件模块art-template
  • 等等等。。。

3. 自定义模块

同样,我们可以在开发时,为特定的功能定制化开发具有特定功能的模块。

2. CommonJS模块规范

特点:

  1. 所有的代码都运行在模块作用域中,不会对全局作用域造成污染。
  2. 模块不限制加载的次数,可以多次加载。
  3. 模块加载的顺序,就是按照其在代码中出现的次序。

3. 基本使用方法

1. 加载模块

语法:

var 自定义导入模块变量名称 = require('模块')

var fs = require('fs')  //导入核心模块中的文件模块
var http = require('http') //导入核心模块中的http模块

执行:
1. 执行被加载模块中的代码
2. 得到被加载模块中的 exports 导出对象,
3. 只有加载了模块,才能使用到处对象中的方法。

2. 模块的导出

了解:

  • Node是模块作用域,所有文件中的成员都只在它所处的模块中有效。
  • 如果想成员被其他模块使用,就必须把这些成员挂载到exports 接口对象中,进行导出操作。
  • 模块的导出实际上是把想与其它模块共享的成员变量进行导出操作。

语法:
导出多个成员

exports.a = 123;
exports.b = 'hello';
exports.c = function () {
    
    
    console.log('ccc')
}
exports.d = {
    
    
    foo : 'bar'
}

此时,导出了一个对象。对象中有4个成员变量,分别是a、b、c、d。我们可以把数字、字符串、数组、函数、对象等导出。

导出单个成员:

	module.exports = '你好'

此时我们导出的只是一个字符串“你好”,而不是导出一个对象。

以下情况会出现导出的覆盖操作:

module.exports = 'hello'

// 后者覆盖前者
module.exports = function (x, y) {
    
    
    return x + y;
}

此时导出的只是一个function

也可以通过module.exports设置为一个对象,然后把要导出的全放入这个对象中,达到导出多个变量的操作。

module.exports = {
    
    
   add: function (x, y) {
    
    
       return x + y;
   },
   str: 'hello'
}

4. 导出的原理解析

提问1:为什么有时候使用 exports 进行导出操作,而有些时候使用 module.exports 来进行导出操作呢?

事实上:Node.js中,每个模块内部都有一个module对象,而module对象中有一个成员叫做exports。所以,你会使用module.exports来进行导出操作。而Node.js为了简化操作,不用每次导出时都加一个module,所以专门提供了一个变量exports,而exports指向的就是module.exports指向的对象。所以我们会有这两种方法来进行操作导出。

**提问2:**什么时候使用exports,什么时候使用module.exports呢?

当我们要导出模块中的多个成员时,建议使用exports。
当我们要导出模块中的一个成员时,建议使用module.exports。

当一个模块需要导出单个成员的时候,直接给exports 赋值是不管用的

exports = 'hello'  //不管用

因为exports只是指向module.exports,而模块最后真正导出的实际上是module.exports。所以直接给exports赋值,导出后在另一个模块中是看不到’hello’的。

下面看一个示例:

//此时exports和module.exports 还是指向同一个引用,所以会把a加入到moule.exports中
exports.a = 123

//把exports重新赋值给一个新对象,此时不指向module.exports
exports = {
    
    }

//由于上一步的操作,此时赋值已经不能放入到module.exports中了。
exports.foo = 'bar'

//在module.exports中加入b
module.exports.b = 456

此时模块导出的内容应该是:

{
    
     a: 123, b: 456 }

解释看上面的代码注释。主要理解了对象是一个引用这个概念就可以理解上面的原因了。

总结

导出操作:真正去使用的时候:
	导出多个成员:exports.xxx = xxx	
	导出单个成员: module.exports = xxx
这样就不会犯错了!

Node.js具有强大的功能,如果你觉得此篇文章对你有帮助,记得一键三连哦!
学无止境!冲!

猜你喜欢

转载自blog.csdn.net/qq_41497756/article/details/109230322
今日推荐