前后端分离项目就该省心省力
本文最后更新于 170 天前,其中的信息可能已经有所发展或是发生改变。

这是一篇非常基础的教程,但可惜中文互联网上大家都没有好好地讨论过这个问题。不过 2024 年了,如果有不太明白的地方也可以问问 AI。

对于个人开发的 B/S 项目来说,通常服务器端(后端)和客户端(前端)无疑都是自己一个人负责开发的,而调试过程的双端大概率都是跑在自己的开发机上的。一旦想要认真开发维护一个项目的话,前后端加反代得运行三个命令很麻烦,这不好。

虽然道理都懂,但这件事也是最近才真的有烦到自己。所以拿自己已经维护了很久的,为公司开发的 Node.js + Vue3 项目开刀,编写一个跨平台的一键启动脚本,实现在 Windows 和 Mac 上都可以很方便地开发调试的效果。

背景介绍

该项目当前默认状态下有两个 package.json,位于根目录下的脚本是 Vue 前端项目的脚本,而 App_Server 下的则是后端服务的脚本;当初没想着这个项目会维护这么久所以设计成了现在的样子。

除了这种恶心的嵌套,现在来看这个项目是在是有太多的设计不合理了;
哎呀,缝缝补补又三年,把业务功能实现好,扩展起来方便就行。

所以很明显,这种情况想要启动项目的话需要分别执行

# yarn run serve
# cd App_Server
# yarn run dev

我们的目标也很明确:在项目根目录实现一行命令将两个服务同时拉起,并自动反代前后端。

Do it!

为了同时运行两个命令,我们需要利用 concurrently 包;而为了反代前后端,则需要 http-proxy-middleware 和 express。虽然在 APP_Server 里已经存在一个 express 对外提供服务了,但那个不要动,只拿来处理后端服务就好了,太耦合会很麻烦,别给自己的脑子找麻烦。

要注意,除了上面提到的包,我还使用了 nodemon 来实现文件监听的自动重启服务。在开发时这非常方便。强烈建议每一个读到这篇文章的人都装一个!

在根目录下运行命令:yarn add concurrently express http-proxy-middleware --save-dev 安装这些必要的功能依赖。

然后在项目根目录创建一个叫做 devProxy.js 的文件,用来配置并启动这个基于 express 的反代服务器:

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');

const app = express();

// 前端服务的反向代理
app.use('/api', createProxyMiddleware({
    target: 'http://localhost:8090/api/',  // 后端接口
    changeOrigin: true,
    pathRewrite: {
        '^/api': '',
    },
}));

app.use('/', createProxyMiddleware({
    target: 'http://localhost:8080/',  // 前端
    changeOrigin: true,
    ws: true,
}));

app.listen(3030, () => {
    console.log('Proxy server running on http://localhost:3030');
});

最后,在项目根目录 ./package.json 中修改 npm 脚本:

  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "dev": "concurrently \"yarn run serve\" \"nodemon ./App_Server/index.js\" \"nodemon devProxy.js\""
  },

现在可以通过 yarn run dev 一键启动项目了,运行良好。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇