当前位置: 首页 > news >正文

使用 concurrently 实现前后端一键启动

使用 concurrently 实现前后端一键启动

本文适合: 前后端分离项目(如 React + Node.js),希望通过一条命令同时启动前端和后端服务。
工具链: Node.js、npm、concurrently。
耗时: 3 分钟。

文章目录

  • 使用 concurrently 实现前后端一键启动
    • @[toc]
    • 一、场景需求
    • 二、解决方案:concurrently
    • 三、操作步骤
      • 1. 项目结构
      • 2. 初始化根目录的 package.json
      • 3. 安装 concurrently
      • 4. 配置启动脚本
        • 参数说明:
      • 5. 一键启动
    • 四、注意事项
      • 1. 路径问题
      • 2. 端口冲突
      • 3. 依赖安装
      • 4. 终止所有进程
    • 五、总结

一、场景需求

在开发前后端分离项目时,通常需要:

  1. 启动前端服务(如 npm run start)。
  2. 启动后端服务(如 npm run dev)。
    每次手动打开两个终端分别执行命令非常繁琐,如何通过一条命令一键启动?

二、解决方案:concurrently

concurrently 是一个 Node.js 工具,可以并行执行多个命令,并合并日志输出到同一终端。


三、操作步骤

1. 项目结构

假设项目结构如下:

my-project/  
├── frontend/     # 前端项目(如 React)  
├── backend/      # 后端项目(如 Express)  
└── package.json  # 根目录的 package.json(需新建)

2. 初始化根目录的 package.json

在项目根目录(my-project/)执行:

npm init -y

3. 安装 concurrently

npm install concurrently --save-dev

4. 配置启动脚本

修改根目录的 package.json,添加以下内容:

{"scripts": {"start:frontend": "cd frontend(你的前端地址) && npm start","start:backend": "cd backend(你的后端地址) && npm run dev","start": "concurrently \"npm run start:frontend\" \"npm run start:backend\""}
}
参数说明:
  • start:frontend:进入前端目录并启动前端服务(假设前端使用 npm start)。
  • start:backend:进入后端目录并启动后端服务(假设后端使用 npm run dev)。
  • start:并行执行前端和后端启动命令。

5. 一键启动

在根目录执行:

npm run start

终端会同时输出前后端日志,效果如下:

在这里插入图片描述


四、注意事项

1. 路径问题

确保 frontendbackend 目录名称与你的项目实际目录一致。如果路径不同,需修改脚本中的路径:

"start:frontend": "cd your-frontend-folder && npm start"

2. 端口冲突

若前后端服务端口冲突(如都使用 3000),需修改其中一个服务的端口号。

  • 前端修改端口(React):在 frontend/package.json 中修改:
    "scripts": {"start": "set PORT=3001 && react-scripts start"  # Windows// 或"start": "PORT=3001 react-scripts start"         # macOS/Linux
    }
    

3. 依赖安装

确保前后端项目已安装依赖:

cd frontend && npm install
cd backend && npm install

4. 终止所有进程

Ctrl + C 可一次性终止所有并行进程。


五、总结

通过 concurrently,我们只需一条命令即可实现前后端服务的同时启动,大幅提升开发效率。此方案适用于任何需要并行执行命令的场景(如多微服务项目)。

完整代码示例: Gitee 链接

http://www.lryc.cn/news/528695.html

相关文章:

  • 常见端口的攻击思路
  • 大数据治理实战:架构、方法与最佳实践
  • 忘记宝塔的访问地址怎么找
  • SQL教程-基础语法
  • shell脚本批量修改文件名之方法(The Method of Batch Modifying File Names in Shell Scripts)
  • 组合模式 - 组合模式的实现
  • 视频外绘技术总结:Be-Your-Outpainter、Follow-Your-Canvas、M3DDM
  • 【硬件测试】基于FPGA的QPSK+帧同步系统开发与硬件片内测试,包含高斯信道,误码统计,可设置SNR
  • c++面试:类定义为什么可以放到头文件中
  • PythonFlask框架
  • Kotlin开发(六):Kotlin 数据类,密封类与枚举类
  • 冬天适合养什么鱼?
  • 【C++动态规划 状态压缩】2597. 美丽子集的数目|2033
  • 前端-Rollup
  • 20【变量的深度理解】
  • 大数据学习之Kafka消息队列、Spark分布式计算框架一
  • 基于Flask的旅游系统的设计与实现
  • “AI视频智能分析系统:让每一帧视频都充满智慧
  • 算法随笔_31:移动零
  • 改进候鸟优化算法之二:基于混沌映射的候鸟优化算法(MBO-CM)
  • 在Docker 容器中安装 Oracle 19c
  • 使用Avalonia UI实现DataGrid
  • MySQL中的读锁与写锁:概念与作用深度剖析
  • Dest1ny漏洞库:用友 U8 Cloud ReleaseRepMngAction SQL 注入漏洞(CNVD-2024-33023)
  • python学opencv|读取图像(四十九)原理探究:使用cv2.bitwise()系列函数实现图像按位运算
  • 【面试】【编程范式总结】面向对象编程(OOP)、函数式编程(FP)和响应式编程(RP)
  • 创建要素图层和表视图
  • 51单片机入门_01_单片机(MCU)概述(使用STC89C52芯片;使用到的硬件及课程安排)
  • 万物皆有联系:驼鸟和布什
  • 【最后203篇系列】007 使用APS搭建本地定时任务