Nodejs 介绍
Nodejs是一个基于Chrome V8 引擎 的JavaScript运行环境,用于在服务端运行JavaScript代码
对象
-
全局对象(不需要引入)
- global:下面的全局对象都挂在global上
- Class:Buffer
- process
- console
- clearInterval、setInterval
- clearTimeout、setTimeout
- global:下面的全局对象都挂在global上
-
每个模块都有,但不可以在命名交互中使用的 模块级别的全局变量
- __dirname:获取当前文件的路径,不包括文件名
- __filename:同上;包括后面的文件名
- exports:导出
- module:module.exports 导出
- require:引入
在
NodeJS中,用var声明的变量并不属于全局的变量,只在当前模块生效
global全局对象则在全局作用域中,任何全局变量、函数、对象都是该对象的一个属性值
特点:
- 事件驱动:一种编程范式,它基于事件的产生和处理
- 高效的I/O处理:
- 单线程
- npm包管理器
- 使用commonJS规范
libuv 是Nodejs的重要底层依赖,是一个高性能的跨平台的异步I/O库;主要负责处理I/O操作和事件循环;
特点1:事件驱动
实现事件驱动的基础:EventEmitter
实现事件驱动的核心机制: 事件循环;
Nodejs的单线程事件循环模型是基于libuv构建的
- 事件生产者:EventEmitter(事件发射器) emit一个事件;事件会被添加到对应的事件队列中
- 消费者:事件循环的主要职责就是不断的从事件队列中取出事件
特点2:非阻塞I/O
- 使用场景: 实时聊天,在线游戏服务器
对于文件系统操作和网络通信等I/O操作,libuv提供了异步处理的能力,在不同操作系统上,libuv会利用相应的底层机制实现高效的异步I/O
特点3:单线程模型
避免了多线程上下文切换开销、锁竞争等;通过事件循环和异步操作,能够在单线程环境下高效处理各种任务; 如何利用多核CPU
特点4:丰富的模块生态系统(npm)
特点5:使用commonJS 规范
require('xxx');引入模块:方便模块化开发exports.xxx= {}; || module.exports = {}导出方式2种- module.exports : 是nodejs模块系统中原始方法
- exports: 本质上是对module.exports 的一个引用
我们常用的webpack就是基于Nodejs开发的;所以常可以看到webpack的配置文件是
module.exports={}
同时也可以使用Es6模块语法,但注意从Nodejs 12.7.0 和 13.2.0 版本开始,使用export语法需要将文件扩展名改为.mjs 或者通过babel转译,才能正确识别
应用场景:
- web服务器开发
- 命令行工具开发
- 实时应用开发