NodeJS 官网:
Node.js

来自官方的一段话: :::info 基于Chrome V8引擎的JS运行环境,NodeJS使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。 :::

是不是比较懵?什么和什么?下面我用另外一种方式来告诉你什么是NodeJS

JavaScript 中的事件

掌握了JavaScript语言的应该知道,JavaScript语言是作为浏览器的脚本语言,可以实现网页与用户之间的交互。

什么是交互?比如用户在网页中输入用户名或密码,这种用户输入行为就可以叫做交互。 或者用户点击网页中的按钮等等,都可以叫做交互。

JavaScript语言之所以可以实现网页与用户之间的交互,主要是依靠事件来完成的。比如,用户的输入事件、点击按钮事件等等。
image.png
通过上面的分析图,我们可以清晰的看到:

  1. 用户点击网页的按钮,执行JavaScript逻辑。
  2. JavaScript逻辑经历三个阶段,分别是捕获事件、触发事件和事件冒泡。
  3. JavaScript逻辑执行完毕后,会将结果返回网页。
  4. 网页再根据结果显示给用户。

通过这样的一个小案例,我们可以知道JavaScript语言处理网页与用户之间的交互,主要是依靠「事件驱动」。

V8 引擎

目前几乎所有的浏览器都支持JavaScript语言,之所以支持的原因在于浏览器中都集成了JavaScript引擎。
在众多浏览器中,Chrome浏览器的性能相对更好,而且Chrome浏览器集成的 V8 JavaScript引擎还是开源的。
NodeJS中的JavaScript引擎没有BOMDOM**NodeJS****JavaScript**的一种运行环境,是对**Google** V8引 擎进行的封装,是一个服务器端的**JavaScript**的解释器。 :::info 还是不明白**NodeJS**有啥特殊的?
JavaScript是一门脚本语言,它需要一个运行环境。就好像PHP需要ApacheJSP需要Tomcat等等(例子不全面,仅供理解)……
NodeJS之前,JavaScript运行环境是浏览器,也就是JavaScript在网页中才能跑起来。NodeJS之后JavaScript又多了一个运行环境,就是NodeJS。 ::: :::warning 由于NodeJS的最底层是Chrome的 V8 引擎,然后libuv封装了一些I/O的线程池管理和网络的I/O操作,这部分是C/C++写的。**NodeJS**可以控制系统文件的读写,网络的输入输出。所以**NodeJS**又可以被单纯的认为是一个可以运行**JavaScript**的服务器。 :::

那在网页中使用JavaScript语言和在Node.js中使用JavaScript语言有什么不同呢?我们可以通过下面这张图来了解一下。
image.png
通过上图可以清晰地看到,Node.js相对于浏览器Node.js没有提供WebKit内核和HTML相关的UI技术。也就是说,Node.js只提供了JavaScript语言。

目前NodeJS大多被用于前端开发的开发环境。
Webpack作为例子,webpack是一个运行在NodeJS端的打包工具,它帮你把你写的a.js,b.js, c.js … 打包成一个bundle.js
而这种打包的第一步是读取(文件读取能力)你的a.js, b.js, c.js …,所以只能在NodeJS环境下做。

那 vue-cli 和 NodeJS 有啥联系?
**vue-cli****react-cli****ng-cli**都是运行在**NodeJS**环境下的脚手架。也就是说我们不可以直接在浏览器里运行**vue-cli**因为有了文件读写的能力,所以vue-cli可以帮我们集成(或者打包)vue核心模块,并将我们的代码转义,压缩。
所以**vue-cli**是运行在**NodeJS**环境下帮助我们开发基于**Vue**框架的项目的脚手架。

所以啊,我个人觉得,NodeJS对于前端最大的贡献,就是可以帮前端做各种轮子(工具),让前端上了一个等级,什么压缩,css前缀啊,打包发布啊,你前端自己都能玩转了。 不然,像以前那样只有<script></scirpt>不得急死。。。

什么是服务器?

那服务器又是什么呢?如果把一个WEB应用比作是一个人的话,那服务器就是人的大脑。
image.png
通过上面的图我们可以知道,人与人交流时,基本上要通过以下几个步骤:

  1. 别人与我交流,我是通过人的感官进行接收。
  2. 感官将信息传递给大脑。
  3. 大脑接收到信息后,进行处理,将处理的结果返回。
  4. 再通过感官反馈给与我交流的人。

通过这个过程,我们可以发现,别人是直接通过感官与我交流的,并不知道大脑是如何工作的,也并不关心大脑是如何工作的。
image.png
WEB应用与人类似,用户是与网页进行交互,网页将信息传递给服务器,服务器接收、处理并响应,最后网页将结果显示给用户。

作为用户来说,并不关心服务器是如何工作的,甚至用户都感觉不到服务器的存在。但是,作为开发人员,想要开发一个完整的WEB应用,服务器的逻辑核心。

Node.js 的简单理解

讲到这里,我们可以简单地来归纳一下Node.js到底是什么了。
**Node.js**就是基于**Chrome**浏览器的 V8 **JavaScript**引擎,以**JavaScript**语言为核心开发语言的服务器技术。
如果使用Node.js开发一个WEB应用应该是怎么样的呢?
image.png
由于JavaScript逻辑是依靠事件驱动的,所以就不难理解Node.js是事件驱动的了。

Node.js除了是基于Chrome浏览器的 V8 引擎以外,还提供了一系列的模块,让我们可以方便地实现一些功能。比如,处理客户端的请求、文件的处理等操作。
image.png
我们学习Node.js,主要就是学习Node.js所提供的模块内容。

感谢

搞懂什么是Node.js原来这么简单node.js脚本之家
纯前端开发眼里nodejs到底是什么? - 知乎