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

it2026-09-01  15

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

1. Node中的模块类别1. 核心模块2. 第三方模块3. 自定义模块 2. CommonJS模块规范3. 基本使用方法1. 加载模块2. 模块的导出 4. 导出的原理解析总结

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

1. Node中的模块类别

1. 核心模块

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

2. 第三方模块

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

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

3. 自定义模块

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

2. CommonJS模块规范

特点:

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

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具有强大的功能,如果你觉得此篇文章对你有帮助,记得一键三连哦! 学无止境!冲!

最新回复(0)