Node.js模块化
模块化雨模块
将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为模块化。
其中拆分的每个文件就是一个模块,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他模块使用
模块化项目
编码时按照模块一个一个编码的,整个项目就是一个模块化项目。
模块化好处
- 防止命名冲突
- 高复用性
- 高维护性
模块化代码示例
新建两个js文件,分别是index.js;me.js
在me.js里面写test函数,然后暴露数据
function test(){
console.log('testhahhh ');
}
// 暴露数据
// module.exports = test;
在index.js里面导入模块(模块化导入me.js脚本文件)
然后调用test函数
// 导入模块
const me = require('./me.js')
// 调用函数
test();
需求升级:如果是me.js里面有多个函数,调用其中一个函数
//新增内容
function spa() {
console.log('spa……');
}
暴露数据使用如下方式
module.exports = {
spa: spa,
test:test
}
在index.js中可以这样调用
// 调用一个
// console.log(me.spa());
me.spa();
模块暴露数据的方式
-
module.exports=value
-
exports.name=value
module.exports = 'ilove';
注意:
- module.exports可以暴露任何数据
- 不能使用exports=value的形式暴露数据。模块内部module与exports的隐式关系 exports=module.exports={}
exports = module.exports = {}
console.log(module.exports === exports);
两者的隐藏关系如上,但是require导入模块返回的是module.exports的值。
导入文件模块
在模块中使用require传入文件路径即可引入文件
const test=require(‘./test.js’)
require使用过程中的一些注意事项:
- 对于自己创建的模块,导入路径时建议写相对路径,不能省略./和…/
- js和json文件导入时可以不用后缀,C/C++编写的node扩展文件也可以不写后缀,但是一般用不到。
- 如果导入的路径是个文件夹,则会首先监测该文件夹下package.json文件中main属性对应的文件,如果main属性不存在,或者package.json不存在,则会监测文件夹下的index.js和index.json,如果还没找到,就会报错。
- 导入node.js内置模块时,直接require模块的名字即可,无需加./和…/
导入模块的基本流程
require导入自定义模块的基本流程
- 将相对路径转化为绝对路径,定位目标文件
- 缓存检测
- 读取目标文件代码
- 包裹为一个函数并执行(自执行函数)。通过argument.callee.toString()查看自执行函数
- 缓存模块的值
- 返回module.exports的值
行(自执行函数)。通过argument.callee.toString()查看自执行函数
- 缓存模块的值
- 返回module.exports的值