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 服务器模块

这里涉及一些查找的优先级和逻辑:

  • 对于内置模块,在编译阶段已经确定了它们的位置,因此没有寻址的问题;
  • 对于指定路径的模块:
    1. 首先查找该文件,缺省的后缀名按照 .js, .node, .json 的顺序尝试;
    2. 然后尝试作为文件夹名查找该文件夹下的 package.json 并引用其中 main 字段指定的文件;
    3. 最后尝试作为文件夹名查找该文件夹下的 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