如何在同一Shell运行FastAPI后端与Electron+Vite+Vue前端?脚本实践疑问
FastAPI后端+Electron-Vite-Vue前端的统一构建运行方案
一、在同一个Shell中构建并运行前后端
要在单个Shell中同时处理前后端的构建和运行,核心是用多进程管理工具实现命令并行执行,最常用的是concurrently:
- 安装依赖:
npm install --save-dev concurrently
- 在项目根目录的
package.json中添加脚本:
{ "scripts": { // 启动后端开发服务 "start:backend": "uvicorn main:app --reload --host 0.0.0.0 --port 8000", // 启动Electron前端开发服务 "start:frontend": "electron-vite dev", // 同时启动前后端 "dev": "concurrently \"npm run start:backend\" \"npm run start:frontend\"", // 后端打包(以PyInstaller为例) "build:backend": "pyinstaller --onefile main.py", // 前端打包 "build:frontend": "electron-vite build", // 统一执行前后端打包 "build": "npm run build:backend && npm run build:frontend" } }
- 执行命令:
- 开发环境:
npm run dev(同一个Shell会分别输出前后端的日志,带颜色区分) - 生产构建:
npm run build(先打包后端,再打包前端)
二、在package.json中编写Python后端构建脚本是否属于良好实践?
要分场景判断:
- 适合的场景:小型全栈项目、团队成员同时熟悉Python和JS生态、希望用统一的
npm命令作为唯一入口(减少命令记忆成本)。 - 不适合的场景:中大型项目、前后端团队分工明确(后端开发者不熟悉npm生态)、后端依赖复杂(需要虚拟环境、Poetry/Pipenv等包管理工具)——此时将Python构建逻辑塞进npm脚本会混淆前后端的职责边界,增加维护难度,甚至引发环境冲突。
结论:小型项目可以用,但并非通用的最佳实践。
三、替代方案
1. 使用Makefile(推荐给熟悉DevOps的团队)
用Makefile统一管理前后端的构建、运行命令,逻辑清晰且跨平台(需要安装Make工具):
.PHONY: dev build backend-dev frontend-dev backend-build frontend-build # 同时启动前后端开发服务(-j 表示并行执行) dev: make -j backend-dev frontend-dev # 后端开发服务 backend-dev: uvicorn main:app --reload --host 0.0.0.0 --port 8000 # 前端开发服务 frontend-dev: electron-vite dev # 统一构建前后端 build: backend-build frontend-build # 后端打包 backend-build: pyinstaller --onefile main.py # 前端打包 frontend-build: electron-vite build
执行命令:
- 开发:
make dev - 构建:
make build
2. 使用Docker Compose(适合环境隔离需求的项目)
将前后端封装为独立容器,通过Docker Compose统一管理启动和构建,彻底隔离本地环境:
version: '3.8' services: backend: build: ./backend command: uvicorn main:app --reload --host 0.0.0.0 --port 8000 ports: - "8000:8000" volumes: - ./backend:/app # 挂载代码实现热重载 frontend: build: ./frontend command: electron-vite dev volumes: - ./frontend:/app depends_on: - backend
执行命令:
- 启动开发服务:
docker-compose up - 构建生产镜像:
docker-compose build
3. 使用全栈项目管理工具(适合大型Monorepo)
比如NX,它专门用于管理多项目仓库,支持统一的构建、运行、测试流程,还能提供依赖分析、缓存优化等功能,适合大型全栈项目,但学习成本较高。
内容的提问来源于stack exchange,提问作者ghana
相关产品推荐
相关产品推荐

