模块化的好处
随着js项目的越来越复杂,就必须考虑模块化。如果没有实现模块化会有很多弊端:
例如全局变量重复、全局污染,js的加载顺序问题,不方便管理。
node的模块方案借鉴了commonjs规范,实现了自己的模块化语法。
主要分为模块的定义、模块导出、模块的引用三个部分。
好处:大大提高了代码的可维护行。其次,编写代码不必从零开始,当一个模块编写完毕,就可以被其它地方引用。我们在编写程序的时候,也经常引用其它模块,包裹Node.js的内置模块和来自第三方的模块。
Node中的自定义模块
在node中,一个.js就是一个模块
1.require谁就运行谁
注意:加载自定义模块,一定要写路径,路径前面一定要加./类型
2.模块天生具有隔离作用域,模块的变量,函数只能在本模块内使用
3.使用exports.xxx=xxx 的语法向外暴露
4.使用module.exports = xxx 的语法向外暴露
module.exports = {
a,
fn
}
注:module.exports语法也可以单独向外暴露一个
module.exports单独暴露一个内容内容后,exports语法就失效了
5.两者的区别
require()加载的实际是module.exports,也就是说当没有使用module.exports时,exports是为module.exports这个空对象添加属性和方法。
6.modlue.exports在向外暴露时class更方便
Node中的内置模块
定义:node官方开发的模块,开发者可以直接调用使用
1.fs模块
上一篇已详细讲解,请跳转 初始Node.js(一)
2.url模块
首先我们需要了解什么是url
下面我们做一个典型的URL的分析
例如:https://www.baidu.com/haha/index.html/?id=12&name=zhangsan&sex=男#page123
https:// 协议
www.baidu.com host服务器地址
/haha 资源路径
/index.html 资源文件
?id=12&name=zhangsan&sex=男 querystring查询字符串
#page123 hash哈希值
理解以后我们就可以接下来的学习
let url = require('url');
let urlPath = 'https://www.baidu.com/haha/index.html?id=12&name=zhangsan&sex=男#page123';
url.parse(urlPath,true);//url的作用,将一个典型的url解析成一个对象,如果添加了true参数,进一步将查询字符串转为对象
3.path模块
path.join('hello','11','12.txt');//拼接路径,将路径片段拼接成完整的符合操作系统规范的相对路径
path.resolve('./hello','1.txt');//拼接路径,将路径片段拼接成完整的符合操作系统规范的绝对路径
path.extname(urlPath);//从资源文件中提取扩展名
path.dirname(urlPath);//从url中提取资源路径
path.parse(urlPath);//格式化路径,返回一个对象,包含路径中的所有信息
4.queryString模块
作用:将查询字符串转化为对象(一般不使用,因为和url的模块一样的作用,所以一般使用url模块加一个参数true来实现)