熟悉 Spring Boot 的 java -jar
启动方式,那咱们就用类比 + 实战方式,来彻底搞懂:
🚀 Node.js 后端项目的 部署 & 启动方式
✅ 和 Spring Boot 的
java -jar xxx.jar
一样,Node.js 也可以一句命令启动,而且方式更灵活多样!
🧱 一、类比理解:Node vs Spring Boot 启动方式
对比项 | Spring Boot | Node.js |
---|---|---|
编译方式 | 先打包成 .jar |
无需打包(直接跑 .js 文件) |
启动命令 | java -jar app.jar |
node app.js |
依赖管理 | Maven / Gradle | npm / yarn |
进程管理 | 自带 | 推荐使用 PM2 |
📦 二、Node.js 启动的几种常见方式
✅ 方法一:直接用 Node 启动(开发环境用得最多)
bash
node app.js
如果你用的是 express
框架,app.js 里通常会有:
js
app.listen(3000, () => {
console.log("Server started on http://localhost:3000");
});
✅ 方法二:用 npm scripts 启动(封装一层)
你可以在 package.json
添加:
json
"scripts": {
"start": "node app.js"
}
然后直接运行:
bash
npm start
这是更推荐的方式,因为以后可以接 CI/CD、自动部署。
✅ 方法三:用 PM2
守护进程启动(推荐生产环境)
PM2 是 Node.js 的 守护进程管理工具,优点:
- 自动重启、日志管理、监控
- 挂了自动拉起来
- 开机自动启动服务
🌟 安装:
bash
npm install -g pm2
🌟 启动你的服务:
bash
pm2 start app.js --name my-node-api
🌟 查看状态:
bash
pm2 ls
🌟 重启、停止服务:
bash
pm2 restart my-node-api
pm2 stop my-node-api
🌟 设置系统开机自动启动:
bash
pm2 startup
pm2 save
🛠️ 三、部署流程汇总(总结步骤)
以下是典型部署流程(适用于生产环境):
bash
# 1. 上传代码
scp -r ./my-app user@your-server:/home/user/
# 2. 登录服务器
ssh user@your-server
# 3. 进入目录,安装依赖
cd my-app
npm install
# 4. 设置环境变量(可选)
export NODE_ENV=production
# 5. 启动服务(推荐 PM2)
pm2 start app.js --name my-node-api
💡 补充说明:Spring Boot 是 JVM 启动,Node.js 是 JS 引擎启动
- Spring Boot 启动了一个 Java 虚拟机(JVM),执行
.jar
里的类 - Node.js 启动了一个 JS 引擎(V8),执行
.js
文件里的逻辑
它们本质上是一样的:在某个端口监听请求、执行后端逻辑、返回响应
🎁 Bonus:如果你项目结构是:
/my-api
├── package.json
├── app.js
├── routes/
├── controllers/
└── ...
你只要:
bash
cd /my-api
npm install
pm2 start app.js
整个项目就上线啦。
其中 app.js
(或 index.js
、main.js
)就是 Node.js 后端项目的启动入口文件。
Node.js 是运行 JavaScript 的 服务器环境,它的核心是用 C++ 写的 V8 引擎。
所以:
- 你写的 JS 文件(如
app.js
)是交给 Node 来"执行"的。 - 它不需要浏览器,也不需要打包,只要
node app.js
就能运行一个服务端程序。
当你执行:
bash
node app.js
或者:
bash
npm start
# (如果 package.json 里写了: "start": "node app.js")
👉 Node.js 就从这个文件开始执行,整个后端服务就启动了!
🔍 下面我们详细拆一下:为什么它能作为入口?
假设你的 app.js
内容如下(基于 Express 框架):
js
// 1️⃣ 引入 express
const express = require('express');
// 2️⃣ 创建 app 实例
const app = express();
// 3️⃣ 定义一个路由
app.get('/', (req, res) => {
res.send('Hello, 千玦!');
});
// 4️⃣ 启动服务器,监听端口
app.listen(3000, () => {
console.log('服务启动成功:http://localhost:3000');
});
🧠 运行过程解析:
步骤 | 行为 | 说明 |
---|---|---|
1️⃣ | 引入依赖 | 加载 Express 库(HTTP 框架) |
2️⃣ | 创建服务实例 | 类似 Spring Boot 的 ApplicationContext |
3️⃣ | 设置路由 | 定义处理请求的逻辑 |
4️⃣ | 启动服务 | 启动 HTTP 服务,监听端口,准备响应请求 |
🧩 扩展知识:你可以自定义入口文件名
虽然常见的是 app.js
,但其实你可以用任何名字,比如:
server.js
main.js
index.js
backend.js
只要你执行的是:
bash
node 文件名.js
它就会被当作主入口文件执行。
🏁 总结一句话:
app.js
相当于 Node.js 后端项目的 "main 函数",只要你执行它,整个服务就开始运行了。