Node.js的简单认识
本文最后更新于 2026年4月16日 下午
本文主要参考:
什么是Node.js
首先理解+回顾一下JavaScript的运行机制:
JavaScript代码需要运行时才能运行,而运行时=引擎+API+事件循环机制:
- 引擎:相当于执行编译、解释、内存管理的程序
- API:比如浏览器提供WebAPI,其中最典型的是DOM API
- 事件循环机制:我们之前说过JavaScript是单线程的,所谓事件循环机制就是实现异步的方式
所谓Node.js,就是一个基于V8引擎的运行时。
Node.js的使用场景
后端
使用Node.js,就可以使用JavaScript / TypeScript语言写后端,因为Node.js提供了诸如fs(文件系统)、net(网络)、http(服务器)等模块,同时,V8 引擎的高效使得基于 Node.js 的程序可以有极高的运行效率。
前端
当然,Node.js也可以用于前端开发,尽管前端的运行环境是浏览器而不是Node.js,但Node.js提供了与浏览器基本相同的机制,同时提供了编译、打包等能力,因此在前端开发中,往往使用TypeScript进行开发,在Node.js环境中完成编译和打包后,将生成的打包文件部署在前端。常用的框架有 React.js、Vue.js 等。
客户端
Node.js 还可以通过 React Native、Electron 等框架编写原生应用,提供与网页开发相似的开发体验。
Node.js运行
Node.js的运行和Python十分相似,可使用REPL (read-eval-print-loop)的方式。
- REPL:命令行输入
node,可以打开一个类似输入python的交互式界面。 - 脚本:
node xxx.js运行一个脚本
Node.js模块化
为什么之前的JavaScript章节没有提及包管理之类的东西?
是因为前端开发中,引入模块的方式:
-
将用到的模块通过Node.js全部打包
-
通过CDN引入
<script src="https://xxx.js"></script>但是这样的引入会在浏览器全局对象
window里面加入xxx这么一个属性,有点污染,因此我们使用ES6 Module进行包管理。
ES6 Module
一些API,看例子即可:
// 文件名 export.js
// 导出值 value
export { value };
// 导出值 value 并重命名为 aliasNameOfValue
export { value as aliasNameOfValue };
// 以下两句等价
export { value as default };
export default value;
// 对于 TypeScript,可以通过以下方式导出类型
// 二者的区别是前一个可以确保这一行内容不会出现在编译结果中
export type { type };
export { type };npm
即Node.js package manager,是Node.js默认的包管理工具。
Node.js的模块查找
import fs from 'fs'; // 内置文件系统模块
import express from 'express'; // 一个 web 服务器模块这里涉及一些查找的优先级和逻辑:
- 对于内置模块,在编译阶段已经确定了它们的位置,因此没有寻址的问题;
- 对于指定路径的模块:
- 首先查找该文件,缺省的后缀名按照
.js,.node,.json的顺序尝试;- 然后尝试作为文件夹名查找该文件夹下的
package.json并引用其中main字段指定的文件;- 最后尝试作为文件夹名查找该文件夹下的
index文件,缺省后缀名逻辑与 c. 相同。- 对于其他没有指定路径的模块,也即通过包管理器安装的模块,会尝试在当前文件夹下的
node_modules文件夹下查找,如果查找失败,则依次从上级文件夹中(可能的)node_modules文件夹下查找。
其他包管理器
| 操作 | npm | yarn | pnpm |
|---|---|---|---|
| 自动安装依赖 | npm install |
yarn install / yarn |
pnpm install |
| 添加依赖 | npm install lodash |
yarn add lodash |
pnpm add lodash |
| 添加开发依赖(不用于生产环境) | npm install -D typescript |
yarn add -D typescript |
pnpm add -D typescript |
| 移除依赖 | npm uninstall lodash |
yarn remove lodash |
pnpm remove lodash |
执行 start 脚本 |
npm run start |
yarn start |
pnpm start |