在掌握了HTML、CSS、JavaScript和Vue框架等前端基础技术后,要想真正自由、灵活地开发和构建项目,前端工程化是一个绕不开的课题。而前端工程化的核心脚本语言正是Node.js。回顾过去,我也曾零散接触过一些,但往往浅尝辄止。与其每次都半途而废,不如集中投入一段时间,对Node.js进行一次系统性的学习和梳理。我不追求成为专家,但希望在前端工程化的实践中,能够真正掌握所需的知识,做到游刃有余、学以致用。
本文内容:
什么是Node.js
Node.js架构
Node.js的应用场景
Node的安装
执行JavaScrip代码
Node的REPL
什么是Node.js
官方定义:
Node.js® is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.
Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。
JavaScript也是高级编程语言,V8对于JavaScript而言就好比Java的JVM,V8是由C++实现的
在浏览器中也有JS引擎,例如:Webkit = WebCore + JsCore(V8)
在Node.js中也有自己的一些额外操作,比如文件系统读写、网络IO、压缩文件等操作
Node.js架构

我们编写的JavaScript代码会经过V8引擎,再通过Node.js的Bindings,将任务放到Libuv的事件循环中;
libuv(Unicorn Velociraptor—独角伶盗龙)是使用C语言编写的库;
libuv提供了事件循环、文件系统读写、网络IO、线程池等等内容;
具体内部代码的执行流程,我会在后续专门讲解事件和异步IO的原理中详细讲解;
Node.js的应用场景
目前前端开发的库都是以node包的形式进行管理;
npm、yarn工具成为前端开发使用最多的工具;
越来越多的公司使用Node.js作为web服务器开发;
大量项目需要借助Node.js完成前后端渲染的同构应用;
资深前端工程师需要为项目编写脚本工具(前端工程师编写脚本通常会使用JavaScript,而不是Python或者shell);
很多企业在使用Electron来开发桌面应用程序;
不仅如此,现在AI的MCP也提供npx的方式
VSCode就是使用Electron开发的,你可以在VSCode中打开开发者工具,它就是HTML+CSS+JS组成的,而Electron是基于Node.js的:

Node的安装

这里windows系统我推荐使用nvm安装node.js,但nvm的安装这里不介绍。只介绍常用的命令:
# 查看已安装和当前的node版本
nvm list
# 查看可安装的版本
nvm list available
# 切换版本
nvm use x.x.x
# 下载
nvm install x.x.x
# 安装最新Current版本
nvm install latest
# 安装最新LTS版本
nvm install lts
# 换镜像
nvm node_mirror https://npm.taobao.org/mirrors/node/
nvm npm_mirror https://npm.taobao.org/mirrors/npm/
# 在执行 nvm list available 如果有结果就OK了已知问题:
如果报错,请使用管理员方式允许CMD,再执行。
正常安装会带npm包管理工具,个别低版本可能安装失败。
执行JavaScrip代码
如果我们编写一个js文件,里面存放JavaScript代码,如何来执行它呢?
目前我们知道有两种方式可以执行:
将代码交给浏览器执行;
将代码载入到node环境中执行;
如果我们希望把代码交给浏览器执行:
需要通过让浏览器加载、解析html代码,所以我们需要创建一个html文件;
在html中通过script标签,引入js文件;
当浏览器遇到script标签时,就会根据src加载、执行JavaScript代码;
如果我们希望把js文件交给node执行:
首先电脑上需要安装Node.js环境,安装过程中会自动配置环境变量;
可以通过终端命令node js文件的方式来载入和执行对应的js文件;

Node的REPL
什么是REPL呢?感觉挺高大上
REPL是Read-Eval-Print Loop的简称,翻译为“读取-求值-输出 循环”;
REPL是一个简单的、交互式的编程环境;
事实上,我们浏览器的console就可以看成一个REPL。

Node也给我们提供了一个REPL环境,我们可以在其中演练简单的代码。
