1001 字
约 3 分钟
0
Node.js 入门:前端工程师的运行时

Node.js 入门:前端工程师的运行时

前端构建、SSR 服务、脚手架工具——现代前端的每一环都跑在 Node 上。这篇把它的定位和基本用法讲清楚。

Node.js 到底是什么

一句话:把 Chrome 的 V8 引擎从浏览器里抠出来,让它能在操作系统上直接跑 JavaScript。

2009 年之前,JS 只能活在浏览器里。Node 的出现让 JS 获得了「操作系统级」的能力:读写文件、起 HTTP 服务、发网络请求、操作数据库。于是 JavaScript 从「网页脚本语言」变成了全栈通用语言。

但要分清 Node 在前端工程里的两种角色:

第一种:构建工具的宿主(99% 的前端日常)。你运行 pnpm dev、pnpm build 时,执行 Astro、Vite、webpack 这些工具的是 Node。此时你的产品代码最终跑在浏览器,Node 只是「编译车间」。

第二种:线上服务的运行时(SSR)。像本站这种 Astro SSR 站点,生产环境跑着一个 Node 进程,收到请求后实时渲染 HTML 返回。此时 Node 本身就是服务器。

npm、node、npx 的关系

装好 Node(本站用 Node 20)就自带三个命令:

node app.js        # 直接运行一个 JS 文件
npm install xxx    # 安装包(Node 的包管理器)
npx astro dev      # 临时执行某个包提供的命令,不用全局安装

npm 之外还有 pnpm 和 yarn 两个替代包管理器,它们解决的是同一个问题的不同优化方向——本站用 pnpm,后面有专篇讲它。

模块系统:CommonJS 与 ESM

Node 有两套模块语法。老项目用 CommonJS:

const fs = require('fs');
module.exports = { hello };

新项目(含本站)用 ES Modules,和浏览器一致:

import fs from 'node:fs';
export function hello() {}

package.json 里 "type": "module" 一行切换。新项目一律建议 ESM,这是语言标准,前后端写法统一。

最小 HTTP 服务

30 行写一个 Web 服务,感受一下 Node 的直接:

import http from 'node:http';

const server = http.createServer((req, res) => {
  if (req.url === '/api/time') {
    res.setHeader('Content-Type', 'application/json');
    res.end(JSON.stringify({ now: new Date().toISOString() }));
    return;
  }
  res.setHeader('Content-Type', 'text/html; charset=utf-8');
  res.end('<h1>你好,Node</h1>');
});

server.listen(3000, () => console.log('跑在 http://localhost:3000'));

真实项目当然不会裸写 http 模块——会用 Express、Fastify 这类框架,或者像本站一样用 Astro 的 Node adapter 把「接收请求 → 渲染 → 返回」整个流水线托管掉。但底层机制就是这段代码的样子:一个事件循环,异步地处理成千上万个连接。

异步是 Node 的灵魂

Node 是单线程事件循环模型:JS 主线程只跑你的代码,文件读写、网络请求这些耗时操作交给底层线程池,完成后通过回调/Promise 通知主线程。所以 Node 特别擅长 I/O 密集(大量网络请求、数据库调用),而不擅长 CPU 密集(大数组计算会卡住整个进程)。

写法上,现代 Node 全面拥抱 async/await:

import { readFile } from 'node:fs/promises';

const content = await readFile('./config.json', 'utf-8');
const config = JSON.parse(content);

版本管理:用 nvm

不同项目要求的 Node 版本不同(本站前端锁 Node 20),推荐用 nvm 管理多版本:

nvm install 20     # 装 Node 20
nvm use 20         # 当前 shell 切到 20

项目里放一个 .nvmrc 文件写上版本号,团队成员 nvm use 一下就统一了。生产部署时同理,Dockerfile 里 FROM node:20-alpine 锁死版本,本地和线上才不会出现「我本地好好的」。

小结

Node 对前端的意义是「把 JS 的领地从浏览器扩展到了整个计算机」。日常你大部分时间只是把它当构建工具的宿主,但理解它的模块系统、事件循环和版本管理,调试构建报错、写 SSR 服务、看懂部署脚本时都会顺畅很多。

Node.js 入门:前端工程师的运行时
http://www.clxhxhhr.top/posts/3710/
作者
clxstart
发布于
2026-09-25
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。