前言: Node.js是成为一名优秀的前端开发工程师的必修课。Node.js中的模块是其应用程序的基本组成部分, 所以我们需要对Node中的模块系统有着清晰的认知与使用。
Node为JS提供了很多的服务器级别的API,这些API被封装到了一个个具名的核心模块中去了。我们可以很方便的使用这些模块,来完成我们想要完成的需求以及功能。
我们在使用node进行开发时,经常会引用第三方的模块,常见的第三方模块有:
同样,我们可以在开发时,为特定的功能定制化开发具有特定功能的模块。
特点:
语法:
var 自定义导入模块变量名称 = require('模块')
var fs = require('fs') //导入核心模块中的文件模块
var http = require('http') //导入核心模块中的http模块
执行:
1. 执行被加载模块中的代码
2. 得到被加载模块中的 exports 导出对象,
3. 只有加载了模块,才能使用到处对象中的方法。
了解:
语法:
导出多个成员
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'
}
提问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具有强大的功能,如果你觉得此篇文章对你有帮助,记得一键三连哦!
学无止境!冲!