官方文档:https://nodejs.org/en
下载地址:https://nodejs.org/en/download/current
一、Node.js概念
Node.js 是一个基于 Chrome V8 JavaScript 引擎的 JavaScript 运行时环境,用于开发高性能、可扩展的网络和服务器端应用程序。与传统的前端 JavaScript 不同,Node.js 运行在服务器端,并提供了广泛的系统级 API,使其能够执行文件系统操作、网络请求、操作数据库等任务。
核心概念:
-
**JavaScript 运行时环境:**Node.js 使得 JavaScript 不再仅限于浏览器中运行。它让开发者可以在服务器端使用 JavaScript 进行编程,替代像 PHP、Python 或 Java 这样的服务器端语言。
-
**单线程 + 非阻塞 I/O:**Node.js 的最核心特点是采用了 单线程事件驱动模型 和 非阻塞 I/O(异步 I/O)。它通过事件循环(event loop)和回调机制,使得处理高并发请求时效率极高。
-
单线程:Node.js 的所有操作都是在一个线程中进行的,因此没有多线程编程中的复杂性(如锁、线程安全问题等)。
-
非阻塞 I/O:Node.js 中的 I/O 操作(如文件读取、网络请求等)不会阻塞主线程,而是通过异步的方式进行。一旦 I/O 操作完成,它会通知主线程执行相应的回调函数。
-
-
**事件驱动:**Node.js 使用事件驱动架构,服务器会监听和响应事件。所有 I/O 操作(如数据库查询、文件读取等)在完成时会触发回调函数,从而实现异步处理。
-
**模块化:**Node.js 提供了一个模块系统(CommonJS),允许开发者将代码分割成独立的模块,便于复用和维护。通过
require()
函数,可以导入其他模块或库。 -
**包管理器 (npm):**Node.js 附带了全球最大的包管理器 npm(Node Package Manager),通过它可以安装、共享和管理项目中的依赖。开发者可以快速获取和使用其他人发布的开源模块。
应用场景:
- Web 应用服务器:由于其非阻塞 I/O 和高并发处理能力,Node.js 非常适合构建高性能的 Web 服务器。
- 实时应用:例如即时通讯、在线游戏等实时性要求高的应用,Node.js 能够以非常低的延迟处理大量并发连接。
- RESTful API 服务器:Node.js 常用于构建后端的 API 服务,通过 HTTP 协议与前端应用通信。
- 微服务架构:Node.js 轻量且扩展性强,非常适合搭建微服务。
- 命令行工具:许多命令行工具也是使用 Node.js 构建的,比如前端的构建工具 Webpack、ESLint 等。
二、安装Node.js
Node.js支持12.0,14.0,16.0,18.0及20.0版本,本文采用14版本。
1.下载并解压Node.js源代码
下载 Node.js 源码包并解压:
cd /usr/local/src
wget https://nodejs.org/dist/v14.15.1/node-v14.15.1-linux-x64.tar.xz
tar -xJf node-v14.15.1-linux-x64.tar.xz
2.复制Node.js安装目录到指定路径
复制Node.js安装目录到 /usr/local
路径下,并重命名为 nodejs14
:
mv node-v14.15.1-linux-x64 /usr/local/nodejs14
3.创建Node.js软链接
将 Node.js 安装目录的 bin
目录下的可执行文件 node
和 npm
创建符号连接:
ln -s /usr/local/nodejs14/bin/npm /usr/bin/npm
ln -s /usr/local/nodejs14/bin/node /usr/bin/node
4.验证Node.js版本
直接执行可执行文件命令检查 node 和 npm 版本验证:
# 验证 node 版本
node -v
# 显示版本信息
v14.15.1
# 验证 npm 版本
npm -v
# 显示版本信息
6.14.8
5.安装cnpm并创建软链接(可选)
npm install -g cnpm --registry=https://registry.npmmirror.com
ln -s /usr/local/nodejs14/bin/cnpm /usr/bin/cnpm
三、关于node和npm
node
和 npm
是 Node.js 生态系统中的两个重要可执行文件,它们分别用于运行 JavaScript 代码和管理项目中的依赖包。
1. node可执行文件
node
是 Node.js 的可执行文件,负责运行 JavaScript 脚本文件。与浏览器中的 JavaScript 运行环境不同,Node.js 允许开发者在服务器或命令行中运行 JavaScript 代码。
1.1 基本用法
-
直接运行 JavaScript 文件:使用
node
命令可以直接运行一个 JavaScript 文件。例如:node app.js
这会启动
app.js
文件并执行其中的 JavaScript 代码。 -
进入 REPL 模式: 直接运行
node
命令进入交互模式(REPL:Read-Eval-Print Loop),你可以在命令行中直接输入和执行 JavaScript 代码:$ node > console.log("Hello, Node.js!")
1.2 常见命令选项
-
node -v
:查看 Node.js 的版本号。node -v
-
node --inspect
:用于调试 Node.js 应用,支持 Chrome DevTools。node --inspect app.js
2. npm可执行文件
npm
是 Node.js 的包管理器,用于安装、管理和共享 JavaScript 包(模块)。它可以安装项目依赖、发布模块到 npm 仓库,或运行项目脚本。
2.1 基本用法
-
安装依赖:通过
npm install
命令来安装项目中的依赖包。它会根据项目的package.json
文件安装相关的依赖:npm install
-
安装全局模块: 使用
-g
选项可以全局安装一个模块,之后可以在系统的任意位置调用:npm install -g <package_name>
例如,安装一个工具包全局可用:
npm install -g nodemon
-
运行脚本: 如果项目的
package.json
中定义了脚本,你可以使用npm run <script_name>
来运行。例如,运行start
脚本:npm run start
2.2 常见命令选项
-
npm -v
:查看 npm 的版本号。npm -v
-
npm install <package_name>
:安装特定的依赖包到项目中。npm install express
-
npm list
:查看项目中已安装的依赖包及其版本。npm list
3.总结
node
:用于在命令行或服务器环境中执行 JavaScript 代码。npm
:用于安装和管理 Node.js 项目的依赖包,以及运行项目中的脚本。
通过这两个工具,开发者可以快速构建、管理、运行 JavaScript 应用,并利用 npm 的丰富生态系统扩展应用的功能。
四、关于cnpm
cnpm
是 China npm 的缩写,它是由阿里巴巴团队维护的一个 npm(Node Package Manager) 的镜像客户端,主要用于中国大陆用户加速访问和安装 npm 包。
由于网络的原因,直接从官方的 npm 仓库(https://registry.npmjs.org/
)安装依赖包有时会比较慢甚至失败。因此,cnpm
提供了一个国内镜像源,通过加速访问和下载,提升依赖包的安装速度。
1.cnpm的主要功能和特点
- npm 镜像:
cnpm
使用了 npm 的国内镜像(https://registry.npmmirror.com/
),这是由阿里巴巴维护的一个 npm 官方仓库的同步镜像库。它的目的就是加速 npm 包的下载,特别适合网络连接 npm 官方仓库不稳定的场景。 - 兼容 npm:
cnpm
的使用方式与npm
基本相同。你可以使用cnpm install
等命令来安装依赖包,与 npm 的命令非常类似,只是内部使用了阿里镜像源。 - 快速安装依赖: 通过
cnpm
安装依赖包,可以极大提升包下载速度,特别是在国内网络环境下。
2.如何安装和使用cnpm
2.1 安装cnpm
如果你已经安装了 Node.js 和 npm,可以通过以下命令全局安装 cnpm
:
npm install -g cnpm --registry=https://registry.npmmirror.com
2.2 使用cnpm
安装成功后,使用 cnpm
的方式与使用 npm
类似,只是将 npm
命令替换为 cnpm
:
-
安装依赖:
cnpm install
-
全局安装:
cnpm install -g <package_name>
-
安装特定包:
cnpm install express
-
查看已安装的包:
cnpm list
3.cnpm与npm的区别
- npm:连接 npm 官方的公共仓库,全球用户都使用这个仓库。
- cnpm:连接的是阿里巴巴团队维护的 npm 镜像仓库,主要为中国用户提供加速服务。
在使用上,二者的命令基本相同,但 cnpm
通过镜像加速可以提升 npm 包在国内的安装速度。