ZCQ
日期:2021年1月28日
模块化好处:
便于管理维护
方便以后代码借用
模块化:
在Node中,一个js文件就是一个模块
每一个js文件中的代码都是独立运行在该模块中,而不是全局作用域
一个模块中的变量和函数不能直接被另一个模块引用
要想引用,必须导出和导入
引入模块
例如:
在模块hello2中引入模块hello1
示例一:
sayName模块(被引出):
//sayName:被引出的模块
//被引用的模块,需要将每个被引用的属性
//或函数通过module.exports或exports导出
module.exports.a1="孙悟空";
exports.a2="猪八戒";
exports.sayName=function()
{
console.log("我是孙悟空");
}
hello(引入sayName模块):
//引入sayName模块
var s1=require("./sayName")
//通过require函数,告诉其引入模块的地址,必须以./或../开头
//require函数返回对模块的引用,必须将其赋给某个变量
console.log(s1);//将模块整个输出
console.log(s1.a1);//输出模块的某个属性
console.log(s1.a2);
s1.sayName();//调用函数
示例二:
sayName模块(被引出):
// 通过module.exports={}将需要被导出的属性或函数作为一个对象被导出
module.exports={
name:"美猴王",
age:1223,
callname:function()
{
console.log("我是美猴王");
}
}
hello(引入sayName模块):
//引入sayName模块
var s1=require("./sayName")
console.log(s1);//将模块整个输出
console.log(s1.name);//输出模块的某个属性
console.log(s1.age);
s1.callname();//调用函数
注:以上模块指文件模块,即用户自定义模块
而核心模块的引用无需对require函数输入路径
如:
var fs = require("fs");
在node中有一个全局对象,类似于网页中的window
在全局中创建的变量都会作为global的属性保存
在全局中创建的函数都会作为global的方法保存
当node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码:
function (exports, require , module , __filename, __dirname){
}
实际上,模块的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递进5个实参:
exports:该对象用来将变量或函数暴露到函数外部
require:用来引入外部模块
module:代表模块本身,exports就是module的属性
filename:当前模块的完整路径
dirname:当前模块所在文件夹的完整路径