Node.js 安装与环境配置详解:从入门到实战

news2024/11/25 19:26:07

**标题:Node.js 安装与环境配置详解:从入门到实战**

---

### 一、Node.js 简介

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,允许开发者在服务器端运行 JavaScript 代码。凭借其事件驱动、非阻塞 I/O 模型,Node.js 成为构建实时网络应用程序的理想选择,如聊天系统、API 服务等。

---

### 二、Node.js 的安装步骤

#### **1. 官方安装**

##### **步骤 1:下载 Node.js**
1. 访问 [Node.js 官网](https://nodejs.org/)。
2. 选择版本:
   - **LTS(长期支持版)**:稳定版本,适合生产环境。
   - **Current(最新特性版)**:适合测试和学习新功能。

##### **步骤 2:安装**
- Windows:下载 `.msi` 文件并运行安装程序。
- macOS:下载 `.pkg` 文件并按照提示安装。
- Linux:使用包管理器(如 apt、yum)安装。

##### **步骤 3:验证安装**
安装完成后,打开命令行或终端,运行以下命令验证:
```bash
node -v   # 查看 Node.js 版本
npm -v    # 查看 npm(Node.js 包管理器)版本
```

---

#### **2. 使用 nvm(Node.js 版本管理器)安装**

##### **什么是 nvm?**
`nvm`(Node Version Manager)是一个 Node.js 版本管理工具,支持安装、切换和管理多个 Node.js 版本。

##### **安装步骤**
1. 下载并安装 nvm:
   ```bash
   curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
   ```

2. 重启终端并验证 nvm:
   ```bash
   nvm --version
   ```

3. 使用 nvm 安装 Node.js:
   ```bash
   nvm install --lts   # 安装 LTS 版本
   nvm install 16      # 安装指定版本
   nvm use 16          # 切换到 Node.js 16
   ```

---

### 三、Node.js 环境配置

#### **1. 初始化项目**

1. 创建项目目录:
   ```bash
   mkdir my-node-app
   cd my-node-app
   ```

2. 初始化 `package.json`:
   ```bash
   npm init -y
   ```

   **说明**:
   - `npm init -y` 自动生成 `package.json` 文件,记录项目的元信息和依赖。

---

#### **2. 安装常用工具**

1. **Express**:轻量级 Web 框架,用于快速搭建服务器。
   ```bash
   npm install express
   ```

2. **nodemon**:开发服务器自动重启工具。
   ```bash
   npm install -g nodemon
   ```

3. **dotenv**:管理环境变量。
   ```bash
   npm install dotenv
   ```

---

#### **3. 配置脚本**

在 `package.json` 中添加启动脚本,简化运行命令:
```json
"scripts": {
  "start": "node app.js",
  "dev": "nodemon app.js"
}
```

---

### 四、创建第一个 Node.js 应用

#### **1. 编写代码**

创建 `app.js` 文件,写入以下代码:
```javascript
const express = require('express');
const app = express();

// 定义一个简单的路由
app.get('/', (req, res) => {
  res.send('Hello, Node.js!');
});

// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server running at http://localhost:${PORT}`);
});
```

---

#### **2. 启动应用**

运行以下命令启动应用:
```bash
npm run dev  # 使用 nodemon 开发模式启动
```

打开浏览器访问 `http://localhost:3000`,页面显示 `Hello, Node.js!` 即表示成功。

---

### 五、Node.js 进阶配置

#### **1. 本地开发的优化**

1. **设置环境变量**
   - 创建 `.env` 文件,存储环境变量:
     ```
     PORT=4000
     ```
   - 使用 `dotenv` 加载环境变量:
     ```javascript
     require('dotenv').config();
     const PORT = process.env.PORT || 3000;
     ```

2. **切换国内镜像**
   - 提高 npm 安装速度,切换到国内镜像:
     ```bash
     npm config set registry https://registry.npmmirror.com
     ```

---

#### **2. 性能优化**

1. **使用异步代码**
   - 推荐使用 `async/await` 替代回调函数:
     ```javascript
     const fetchData = async () => {
       const data = await fetch('https://api.example.com/data');
       return data.json();
     };
     ```

2. **缓存静态资源**
   - 使用缓存工具(如 Redis)提高性能。

3. **使用多核**
   - 利用 `cluster` 模块在多核 CPU 上运行:
     ```javascript
     const cluster = require('cluster');
     if (cluster.isMaster) {
       for (let i = 0; i < require('os').cpus().length; i++) {
         cluster.fork();
       }
     } else {
       require('./app'); // 运行应用
     }
     ```

---

### 六、Node.js 常见问题与解决方法

#### **1. 安装速度慢**
**原因**:默认使用的 npm 源较慢。
**解决方法**:切换国内镜像:
```bash
npm config set registry https://registry.npmmirror.com
```

#### **2. npm 命令不可用**
**原因**:Node.js 安装路径未添加到环境变量。
**解决方法**:
- 检查环境变量是否包含 Node.js 的安装路径。

#### **3. 端口被占用**
**原因**:上次启动的进程未关闭。
**解决方法**:
- 查找占用端口的进程:
  ```bash
  lsof -i:3000
  ```
- 结束进程:
  ```bash
  kill -9 <PID>
  ```

---

### 七、Node.js 推荐学习资源

#### **1. 官方文档**
- [Node.js 官方文档](https://nodejs.org/en/docs/)
- [npm 官方文档](https://docs.npmjs.com/)

#### **2. 教程与书籍**
- 《Node.js 入门》
- 《Node.js 深入浅出》
- 《JavaScript 异步编程》

#### **3. 开源项目**
- [Express 框架](https://expressjs.com/)
- [Nest.js 框架](https://nestjs.com/)

---

### 八、总结

Node.js 是一个强大的 JavaScript 运行时环境,适用于现代 Web 应用开发。通过本文,你可以完成 Node.js 的安装、配置和第一个应用程序的开发,并为进阶学习打下坚实基础。

**下一步学习方向**:
1. 深入了解 Node.js 核心模块(如 fs、events、http)。
2. 学习与数据库集成(如 MongoDB、MySQL)。
3. 构建更复杂的项目,例如 RESTful API 或实时应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2247457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java-08 深入浅出 MyBatis - 多对多模型 SqlMapConfig 与 Mapper 详细讲解测试

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

IDEA使用tips(LTS✍)

一、查找项目中某个外部库依赖类的pom来源 1、显示图 2、导出Maven 项目依赖的可视化输出文件 3、点击要查找的目标类&#xff0c;项目中定位后复制依赖名称 4、在导出的依赖的可视化文件中搜索查找 5、综上得到&#xff0c;Around类来自于pom中的spring-boot-starter-aop:jar…

【LLM训练系列02】如何找到一个大模型Lora的target_modules

方法1&#xff1a;观察attention中的线性层 import numpy as np import pandas as pd from peft import PeftModel import torch import torch.nn.functional as F from torch import Tensor from transformers import AutoTokenizer, AutoModel, BitsAndBytesConfig from typ…

如何选择服务器

如何选择服务器 选择服务器时应考虑以下几个关键因素&#xff1a; 性能需求。根据网站的预期流量和负载情况&#xff0c;选择合适的处理器、内存和存储容量。考虑网站是否需要处理大量动态内容或高分辨率媒体文件。 可扩展性。选择一个可以轻松扩展的服务器架构&#xff0c;以便…

C++共享智能指针

C中没有垃圾回收机制&#xff0c;必须自己释放分配的内存&#xff0c;否则就会造成内存泄漏。解决这个问题最有效的方式是使用智能指针。 智能指针是存储指向动态分配(堆)对象指针的类&#xff0c;用于生存期的控制&#xff0c;能够确保在离开指针所在作用域时&#xff0c;自动…

python Flask指定IP和端口

from flask import Flask, request import uuidimport json import osapp Flask(__name__)app.route(/) def hello_world():return Hello, World!if __name__ __main__:app.run(host0.0.0.0, port5000)

虚幻引擎---初识篇

一、学习途径 虚幻引擎官方文档&#xff1a;https://dev.epicgames.com/documentation/zh-cn/unreal-engine/unreal-engine-5-5-documentation虚幻引擎在线学习平台&#xff1a;https://dev.epicgames.com/community/unreal-engine/learning哔哩哔哩&#xff1a;https://www.b…

Java开发经验——SpringRestTemplate常见错误

摘要 本文分析了在使用Spring框架的RestTemplate发送表单请求时遇到的常见错误。主要问题在于将表单参数错误地以JSON格式提交&#xff0c;导致服务器无法正确解析参数。文章提供了错误案例的分析&#xff0c;并提出了修正方法。 1. 表单参数类型是MultiValueMap RestControl…

oracle会话追踪

一 跟踪当前会话 1.1 查看当前会话的SID,SERIAL# #在当前会话里执行 示例&#xff1a; SQL> select distinct userenv(sid) from v$mystat; USERENV(SID) -------------- 1945 SQL> select distinct sid,serial# from v$session where sid1945; SID SERIAL# …

数据可视化复习2-绘制折线图+条形图(叠加条形图,并列条形图,水平条形图)+ 饼状图 + 直方图

目录 目录 一、绘制折线图 1.使用pyplot 2.使用numpy ​编辑 3.使用DataFrame ​编辑 二、绘制条形图&#xff08;柱状图&#xff09; 1.简单条形图 2.绘制叠加条形图 3.绘制并列条形图 4.水平条形图 ​编辑 三、绘制饼状图 四、绘制散点图和直方图 1.散点图 2…

postgresql按照年月日统计历史数据

1.按照日 SELECT a.time,COALESCE(b.counts,0) as counts from ( SELECT to_char ( b, YYYY-MM-DD ) AS time FROM generate_series ( to_timestamp ( 2024-06-01, YYYY-MM-DD hh24:mi:ss ), to_timestamp ( 2024-06-30, YYYY-MM-DD hh24:mi:ss ), 1 days ) AS b GROUP BY tim…

【JavaEE初阶 — 多线程】定时器的应用及模拟实现

目录 1. 标准库中的定时器 1.1 Timer 的定义 1.2 Timer 的原理 1.3 Timer 的使用 1.4 Timer 的弊端 1.5 ScheduledExecutorService 2. 模拟实现定时器 2.1 实现定时器的步骤 2.1.1 定义类描述任务 定义类描述任务 第一种定义方法 …

一文学会Golang里拼接字符串的6种方式(性能对比)

g o l a n g golang golang的 s t r i n g string string类型是不可修改的&#xff0c;对于拼接字符串来说&#xff0c;本质上还是创建一个新的对象将数据放进去。主要有以下几种拼接方式 拼接方式介绍 1.使用 s t r i n g string string自带的运算符 ans ans s2. 使用…

LeetCode 3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n))

【LetMeFly】3244.新增道路查询后的最短距离 II&#xff1a;贪心&#xff08;跃迁合并&#xff09;-9行py&#xff08;O(n)&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/shortest-distance-after-road-addition-queries-ii/ 给你一个整数 n 和一个二维…

MyBatis中特殊SQL的执行

目录 1.模糊查询 2.批量删除 3.动态设置表名 4.添加功能获取自增的主键 1.模糊查询 List<User> getUserByLike(Param("username") String username); <select id"getUserByLike" resultType"com.atguigu.mybatis.pojo.User">&…

ES 基本使用与二次封装

概述 基本了解 Elasticsearch 是一个开源的分布式搜索和分析引擎&#xff0c;基于 Apache Lucene 构建。它提供了对海量数据的快速全文搜索、结构化搜索和分析功能&#xff0c;是目前流行的大数据处理工具之一。主要特点即高效搜索、分布式存储、拓展性强 核心功能 全文搜索:…

Azkaban部署

首先我们需要现在相关的组件&#xff0c;在这里已经给大家准备好了相关的安装包&#xff0c;有需要的可以自行下载。 只需要启动hadoop集群就可以&#xff0c;如果现在你的hive是打开的&#xff0c;那么请你关闭&#xff01;&#xff01;&#xff01; 如果不关会造成证书冲突…

Jmeter中的定时器

4&#xff09;定时器 1--固定定时器 功能特点 固定延迟&#xff1a;在每个请求之间添加固定的延迟时间。精确控制&#xff1a;可以精确控制请求的发送频率。简单易用&#xff1a;配置简单&#xff0c;易于理解和使用。 配置步骤 添加固定定时器 右键点击需要添加定时器的请求…

JavaEE初学07

JavaEE初学07 MybatisORMMybatis一对一结果映射一对多结果映射 Mybatis动态sqlif标签trim标签where标签set标签foreach标签补充 Mybatis Mybatis是一款优秀的持久层框架&#xff0c;他支持自定义SQL、存储过程以及高级映射。Mybatis几乎免除了所有的JDBC代码以及设置参数和获取…

【layui】table的switch、edit修改

<title>简单表格数据</title><div class"layui-card layadmin-header"><div class"layui-breadcrumb" lay-filter"breadcrumb"><a>系统设置</a><a>简单表格数据</a></div> </div>&…