使用 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.mzph.cn/pingmian/68543.shtml

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

相关文章

【NLP251】NLP RNN 系列网络

NLP251 系列主要记录从NLP基础网络结构到知识图谱的学习 1.原理及网络结构 1.1RNN 在Yoshua Bengio论文中( http://proceedings.mlr.press/v28/pascanu13.pdf )证明了梯度求导的一部分环节是一个指数模型…

OpenCV:在图像中添加噪声(瑞利、伽马、脉冲、泊松)

目录 简述 1. 瑞利噪声 2. 伽马噪声 3. 脉冲噪声 4. 泊松噪声 总结 相关阅读 OpenCV:在图像中添加高斯噪声、胡椒噪声-CSDN博客 OpenCV:高通滤波之索贝尔、沙尔和拉普拉斯-CSDN博客 OpenCV:图像处理中的低通滤波-CSDN博客 OpenCV&…

小智 AI 聊天机器人

小智 AI 聊天机器人 (XiaoZhi AI Chatbot) 👉参考源项目复现 👉 ESP32SenseVoiceQwen72B打造你的AI聊天伴侣!【bilibili】 👉 手工打造你的 AI 女友,新手入门教程【bilibili】 项目目的 本…

亚博microros小车-原生ubuntu支持系列:16 机器人状态估计

本来想测试下gmapping建图,但是底层依赖了yahboomcar_bringup做底层的数据处理,所以先把依赖的工程导入。 程序启动后,会订阅imu和odom数据,过滤掉一部分的imu数据后,然后与odom数据进行融合,最后输出一个…

C++中的类与对象(中)

在上一节中,我们初步了解了一下,C中的类,这一概念,这一节让我们进一步深入了解一下。 文章目录 目录 前言 一、类中的默认成员函数 1.1 构造函数 构造函数的特点: 1.2 析构函数 析构函数的特点: 1.3 …

Kotlin开发(六):Kotlin 数据类,密封类与枚举类

引言 想象一下,你是个 Kotlin 开发者,敲着代码忽然发现业务代码中需要一堆冗长的 POJO 类来传递数据。烦得很?别急,Kotlin 贴心的 数据类 能帮你自动生成 equals、hashCode,直接省时省力!再想想需要多种状…

redis数据安全与性能保障

数据安全与性能保障 1、持久化1.1 快照持久化1.2 AOF持久化1.3 重写/压缩AOF文件 2、复制2.1 Redis复制的启动过程2.2 主从链 3、处理系统故障3.1 验证快照文件和AOF文件 4、事务4.1 java中的redis事务使用 如有侵权,请联系~ 如有错误,也欢迎…

数据分析系列--③RapidMiner算子说明及数据预处理

一、算子说明 1.新建过程 2.算子状态灯 状态灯说明: (1)状态指示灯: 红色:指示灯说明有参数未被设置或输入端口未被连接等问题; 黄色:指示灯说明还未执行算子,不管配置是否基本齐全; 绿色:指示灯说明一切正常,已成功执行算子。 (2)三角…

基于Go语言的三甲医院人机与智能体协同环境系统(上.文章部分)

一、引言 1.1 研究背景与意义 1.1.1 三甲医院对高效协同系统的需求 三甲医院作为医疗体系的核心力量,承担着疑难病症诊治、医学科研教学等重要任务,其业务具有高度的复杂性。在日常运营中,三甲医院涉及多个科室,每个科室又包含众多专业领域,各科室之间需要紧密协作,共…

js笔记(黑马程序员)

(Web APIs day4) 一、日期对象 1.实例化 在代码中发现了 new 关键字时,一般将这个操作称为实例化 创建一个时间对象并获取时间// 1.得到当前时间 2.日期对象方法 因为日期对象返回的数据我们不能直接使用,所以需…

SOME/IP--协议英文原文讲解2

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.1 Speci…

python-leetcode-反转链表 II

92. 反转链表 II - 力扣(LeetCode) # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def reverseBetween(self, head: Optional…

LM Studio 本地部署DeepSeek及其他AI模型的详细操作教程及硬件要求

本篇文章主要讲解,通过LM Studio工具实现各类型AI模型本地部署的操作方法方式。 作者:任聪聪 日期:2025年1月29日 LM Studio 介绍: LM Studio是一款能够本地离线运行各类型大语言模型的客户端应用,通过LM Studio 可以…

SOME/IP--协议英文原文讲解3

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 Note: Thi…

Janus Pro:DeepSeek 开源革新,多模态 AI 的未来

Janus Pro 是 DeepSeek 开发的一个开源多模态人工智能框架,它通过集成视觉和语言处理能力,提供了高性能的多模态任务处理能力。 在线体验: https://deepseek-januspro.com/ 背景 Janus Pro 于2025年1月发布,是一个开源的多模态…

Jenkins上生成的allure report打不开怎么处理

目录 问题背景: 原因: 解决方案: Jenkins上修改配置 通过Groovy脚本在Script Console中设置和修改系统属性 步骤 验证是否清空成功 进一步的定制 也可以使用Nginx去解决 使用逆向代理服务器Nginx: 通过合理调整CSP配置&a…

指针的介绍3前

1.字符指针变量 1.1介绍 char arr[] "abcdef";char* p arr; 上面的代码中,我创建了 字符数组 arr 来存储一个字符串 此时,我可以创建一个指针变量对这个字符串进行相应的修改: 我也可以创建一个指针变量指向一个字符串&#xff…

Scrapy如何设置iP,并实现IP重用, IP代理池重用

前置知识 1/3乐观锁 2/3 Scrapy流程(非全部) 3/3 关于付费代理 我用的"快代理", 1000个ip, 每个ip1min的有效期, 你用的时候, 把你的链接, 用户名填上去就行 设置代理IP 🔒 & 帮助文档: ①meta ②meta#proxy$ 语法: ①proxy的设置: Request对象中…

gesp(C++六级)(7)洛谷:P10376:[GESP202403 六级] 游戏

gesp(C六级)(7)洛谷:P10376:[GESP202403 六级] 游戏 题目描述 你有四个正整数 n , a , b , c n,a,b,c n,a,b,c,并准备用它们玩一个简单的小游戏。 在一轮游戏操作中,你可以选择将 n n n 减去 a a a&am…

【16届蓝桥杯寒假刷题营】第2期DAY5

5.变变数组 - 蓝桥云课 给定一个长度为 n 的整数数组 A,A 中第 i 个元素为 Ai​(1≤i≤n),你只能在 A 中选择一个元素 a,将 A 中所有数值等于 a 的元素变为 a2,请问变化后 A 中所有元素和的最大为多少。 …