Node.js 让 JavaScript 突破了浏览器限制,可以直接在操作系统上运行,实现服务器搭建、文件操作和数据库读写。本文为您快速梳理其核心工作流与常用概念。
一、 运行环境与模块化 (CommonJS)
Node.js 不是一门新语言,而是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它移除了前端的 DOM/BOM,新增了 fs、http 等系统级 API,并采用事件驱动和非阻塞 I/O 模型,极其擅长处理高并发网络应用。
为了避免代码臃肿和全局变量污染,Node.js 默认遵循 CommonJS 模块化规范。每个文件都是一个独立的封闭作用域,开发者可以通过 module.exports 将内部的函数或变量公开,在其他文件里使用 require() 即可按路径引入并调用。Node.js 还内置了缓存机制,确保多次引入同一模块时只执行一次,极大提升了运行效率。
二、 包管理机制 (npm 与 pnpm)
在实际开发中,我们通常通过 npm 来下载和管理开源社区的第三方包。项目的核心配置都记录在 package.json 蓝图文件中,其中 dependencies 存放生产环境必备的核心包,而 devDependencies 存放打包上线时会被剔除的开发辅助工具。下载的包会统一存放在庞大的 node_modules 文件夹里,配合版本锁确保多端运行环境的一致性。
为了解决传统 npm 带来的“幽灵依赖”(可越权调用未声明的底层包)和“依赖分身”(多版本导致重复下载)问题,现代项目多采用 pnpm。pnpm 采用了“全局存储 + 软硬链接”的底层架构:所有包在电脑硬盘上只存一份,项目中仅通过系统链接进行调用。这不仅极大地释放了磁盘空间,实现了秒级的安装速度,还通过严格的软链机制彻底封杀了幽灵依赖。
三、 核心命令速查 (日常开发必备)
npm 核心命令
# ==========================================
# npm 高频核心命令速查表 (日常开发必备)
# ==========================================
# 1. 项目初始化阶段
npm init # 交互式初始化项目,引导你生成项目的总控蓝图 package.json
npm init -y # 极速初始化,跳过所有提问,直接使用默认配置一键生成 package.json
# 2. 环境复原阶段 (拉取开源项目或团队代码后的第一步)
npm install # 业界习惯简写为 npm i。自动读取 package.json,一键下载并还原所有依赖环境
# 3. 引入与卸载“乐高积木”
npm i dayjs # 引入常规第三方包(如 dayjs),自动登记为生产环境依赖 (dependencies)
npm i eslint -D # 引入开发辅助工具(如 eslint),自动登记为开发环境依赖 (devDependencies)
npm i -g nodemon # 全局安装命令行工具(如 nodemon),安装后在电脑任何目录下都能直接使用
npm uninstall dayjs # 卸载指定的包,并极度干净地从 package.json 记录中将其彻底抹除
# 4. 自动化脚本执行
npm run dev # 执行 package.json 内 scripts 字段定义的 "dev" 命令 (通常用于启动本地开发环境)
npm run build # 执行 scripts 字段定义的 "build" 命令 (通常用于项目上线前的代码打包编译)
# 5. 临时调用与局部执行 (npx 现代最佳实践)
npx create-react-app my-app # 临时下载并执行脚手架创建项目,用完即焚,绝对不污染电脑的全局环境
npx nodemon # 优先去当前项目的 node_modules 里寻找并运行局部的 nodemon,避免全局版本冲突
pnpm 核心命令
# ==========================================
# pnpm 核心命令速查表 (与 npm 对标)
# ==========================================
# 1. 环境复原阶段 (对标 npm install)
pnpm install # 简写为 pnpm i。读取蓝图,神速还原 node_modules 结构
# 2. 引入“乐高积木” (注意语义的进化:从 install 变成了 add)
# pnpm 认为,“安装(install)”是针对整个项目的,而“添加(add)”才是针对某个具体的包
pnpm add dayjs # (对标 npm i dayjs) 添加业务依赖到 dependencies
pnpm add eslint -D # (对标 npm i eslint -D) 添加开发辅助工具到 devDependencies
# 3. 卸载不需要的包
pnpm remove dayjs # (对标 npm uninstall dayjs) 卸载包并干净地抹除 package.json 里的记录
# 4. 自动化脚本执行 (完全一致)
pnpm run dev # (对标 npm run dev) 执行 package.json 里的自定义启动命令
pnpm run build # (对标 npm run build) 执行打包命令
# 偷懒小技巧:对于自定义命令,pnpm 甚至允许你省略 run,直接敲 pnpm dev 即可运行!
# 5. 临时调用与局部执行 (对标 npx)
pnpm dlx create-react-app my-app # (对标 npx) 临时下载并执行脚手架,用完即焚
四、 核心命令速查 (表格版)
4.1 npm 核心命令
| 执行场景 | 命令指令 | 核心作用说明 |
|---|---|---|
| 初始化项目 | npm init |
交互式生成项目蓝图 package.json |
| 极速初始化 | npm init -y |
跳过提问,使用默认配置一键生成 package.json |
| 一键环境复原 | npm install 或 npm i |
读取蓝图,从云端全量下载并还原所有依赖包 |
| 安装生产依赖 | npm i <包名> |
下载包,并自动登记到 dependencies (如 axios) |
| 安装开发依赖 | npm i <包名> -D |
下载包,并自动登记到 devDependencies (如 eslint) |
| 全局安装 | npm i -g <包名> |
安装到电脑系统层级,任何终端路径均可直接使用 |
| 卸载/删除包 | npm uninstall <包名> |
删除文件,并同步抹除 package.json 中的历史记录 |
| 运行自动化脚本 | npm run <脚本名> |
执行 package.json 中 scripts 字段定义的快捷别名命令 |
| 临时调用工具 | npx <命令> |
临时下载执行(用完即焚),或优先调用局部安装的工具 |
4.2 pnpm 核心命令
| 执行场景 | pnpm 新指令 | 对标的旧 npm 指令 |
|---|---|---|
| 一键环境复原 | pnpm install 或 pnpm i |
npm install |
| 添加生产依赖 | pnpm add <包名> |
npm i <包名> |
| 添加开发依赖 | pnpm add <包名> -D |
npm i <包名> -D |
| 卸载/删除包 | pnpm remove <包名> |
npm uninstall <包名> |
| 运行自动化脚本 | pnpm run <脚本名> |
npm run <脚本名> |
| 极限偷懒运行 | pnpm <脚本名> |
(pnpm 特供,可直接省略 run 单词) |
| 临时调用工具 | pnpm dlx <命令> |
npx <命令> |