require 文件查找策略:
- 文件模块存在缓存区:优先从缓存中加载已经存在的模块
- 参数是 原生模块(http,fs):优先检查模块是否在原生模块列表中
- 参数是 绝对路径的文件:则直接查找对应的路径,速度最快
- 参数是 相对路径:相对于
当前调用require的文件去查找 - 目录:
- 默认是package.json里的main属性来指定目录模块,如果按确切的文件名没有找到模块
- 则NodeJs会尝试带上
.js、.json或.node拓展名再加载
- 第三方模块:
- 先从当前目录的node_moudles中查找
- 没找到的话去父级目录的node_modules里去查找
- 逐层向上直到根目录,如果还没找到
- 就是环境变量NODE_PATH 中查找
在nodejs中,为了提高性能,避免对同一个模块进行多次重复的加载操作,浪费资源:当require到对应的文件后,会缓存起来,下次就可以直接从文件缓存区获取了
这个缓存区本质上是个对象,k:模块的标识符(文件绝对路径); v: 对应的模块实例
原生模块(核心模块):是Nodejs 内置的,不需要额外安装
- http模块: 用于创建HTTP服务器和客户端,可以用来搭建一个简单的web服务器
- fs模块:提供了文件系统相关的功能, 像读取文件、写入文件、重命名文件等操作
- path模块:用于处理文件路径,可以帮助拼接路径、获取路径的扩展名
- os模块:提供了操作系统相关的使用方法:获取系统内存、CPU信息等
const http = require('http');
const fs = require('fs');
const path = require('path');
const os = require('os');
const platform = os.platform();
const totalmem = os.totalmem();
const filePath = path.join(__dirname, 'sss.text');
fs.readFile('sss.text', 'utf-8',(err,data)=>{});
const server = http.createServer((req,res)=>{
res.writeHead(200,{'Content-Type': 'text/plain'});
res.end('Hello, world');
});
server.listen(3000,() =>{});
__dirname(模块级别的全局对象):获取当前文件所在的路径,不包括后面的文件名
还有一些全局对象如Buffer、process 也是Node的原生模块,但是他们不需要引用就可以使用