使用 concurrently 并行地运行多个命令(同时跑前端和后端的服务)

我现在有一个项目是这样的,前端是用 React 写的,后端是用 Nodejs,目录结构如下:

1 .
2 ├── README.md
3 ├── backend
4 ├── node_modules
5 ├── package.json
6 ├── public
7 ├── src
8 └── yarn.lock

这个 package.json 的内容如下:

 1 {
 2   "name": "crudtest",
 3   "version": "0.1.0",
 4   "private": true,
 5   "dependencies": {
 6     "classnames": "^2.2.5",
 7     "concurrently": "^3.5.1",
 8     "react": "^16.2.0",
 9     "react-dom": "^16.2.0",
10     "react-redux": "^5.0.7",
11     "react-router-dom": "^4.2.2",
12     "react-scripts": "1.1.1",
13     "redux": "^3.7.2",
14     "redux-thunk": "^2.2.0"
15   },
16   "scripts": {
17     "start": "react-scripts start",
18     "build": "react-scripts build",
19     "test": "react-scripts test --env=jsdom",
20     "eject": "react-scripts eject",
21   },
22   "devDependencies": {
23     "redux-devtools-extension": "^2.13.2"
24   },
25   "proxy": "http://localhost:8080"
26 }

而后端项目是放在 backend 这个目录中,其目录结构如下:

1 backend
2 ├── etc
3 ├── node_modules
4 ├── package-lock.json
5 ├── package.json
6 └── server.js

它的 package.json 文件,内容如下:

 1 {
 2   "name": "backend",
 3   "version": "1.0.0",
 4   "description": "",
 5   "main": "server.js",
 6   "scripts": {
 7     "test": "echo \"Error: no test specified\" && exit 1",
 8     "start": "nodemon --exec babel-node -- ./server.js"
 9   },
10   "keywords": [],
11   "author": "",
12   "license": "ISC",
13   "dependencies": {
14     "body-parser": "^1.18.2",
15     "express": "^4.16.2",
16     "mongodb": "^3.0.4"
17   },
18   "devDependencies": {
19     "babel-cli": "^6.26.0",
20     "babel-preset-es2015": "^6.24.1",
21     "nodemon": "^1.17.1"
22   }
23 }

现在前端项目要运行起来简单,只要运行如下命令即可。

$ npm run start

就会跑 3000 端口。

那么要运行服务器的程序的话,可能要这样:

1 $ cd backend
2 $ npm run start

就会跑 8080 端口。

那么有没有一种方法同时运行两个服务呢?

就是用一条命令跑两个服务。

解决方法如下:

1、在项目根目录下,运行:

1 $ npm i concurrently --save
2 3 $ yarn add concurrently
  1. 然后更改 package.json 文件,如下:
 1 {
 2   "name": "crudtest",
 3   "version": "0.1.0",
 4   "private": true,
 5   "dependencies": {
 6     "classnames": "^2.2.5",
 7     "concurrently": "^3.5.1",
 8     "react": "^16.2.0",
 9     "react-dom": "^16.2.0",
10     "react-redux": "^5.0.7",
11     "react-router-dom": "^4.2.2",
12     "react-scripts": "1.1.1",
13     "redux": "^3.7.2",
14     "redux-thunk": "^2.2.0"
15   },
16   "scripts": {
17     "start": "react-scripts start",
18     "build": "react-scripts build",
19     "test": "react-scripts test --env=jsdom",
20     "eject": "react-scripts eject",
21     "server": "npm start --prefix backend",
22     "dev": "concurrently \"npm run server\" \"npm run start\""
23   },
24   "devDependencies": {
25     "redux-devtools-extension": "^2.13.2"
26   },
27   "proxy": "http://localhost:8080"
28 }

主要添加了下面这两行:

1 "server": "npm start --prefix backend",
2 "dev": "concurrently \"npm run server\" \"npm run start\""

有了 --prefix backend 就不用 cd backend 了,也就是说运行 npm run server 就会跑后端的服务,相当于:

1 $ cd backend
2 $ npm run start

最后运行 npm run dev 相当于同时运行下面两条命令:

1 $ npm run server
2 $ npm run start

界面如下:

原文访问

转载于:https://www.cnblogs.com/joyco773/p/11403804.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤来实现在前端开发时同时使用mock接口和服务器接口: 1. 安装http-proxy-middleware和json-server,分别用于代理服务器接口和mock接口。 ``` npm install http-proxy-middleware json-server --save-dev ``` 2. 在package.json中添加scripts,用于启动mock服务和代理服务器接口。 ```json "scripts": { "start": "node server.js", "mock": "json-server --watch db.json", "dev": "concurrently \"npm run mock\" \"npm start\"" } ``` 3. 创建一个server.js文件,用于代理服务器接口。 ```javascript const express = require('express'); const { createProxyMiddleware } = require('http-proxy-middleware'); const app = express(); app.use('/api', createProxyMiddleware({ target: 'http://localhost:3000', // 服务器接口地址 changeOrigin: true, })); app.listen(4000, () => { console.log('Proxy server listening on port 4000'); }); ``` 4. 创建一个db.json文件,用于存储mock数据。 ```json { "users": [ { "id": 1, "name": "Alice" }, { "id": 2, "name": "Bob" } ] } ``` 5. 在前端代码中使用http-proxy-middleware代理服务器接口和mock接口。 ```javascript import { createProxyMiddleware } from 'http-proxy-middleware'; const apiProxy = createProxyMiddleware('/api', { target: 'http://localhost:4000' }); const mockProxy = createProxyMiddleware('/api', { target: 'http://localhost:3000' }); // 在开发环境中使用mock接口,生产环境中使用服务器接口 const useMock = process.env.NODE_ENV === 'development'; const proxy = useMock ? mockProxy : apiProxy; const app = express(); app.use(proxy); // 使用代理 app.listen(3001, () => { console.log('App listening on port 3001'); }); ``` 通过以上步骤,就可以在前端开发时同时使用mock接口和服务器接口了。在开发环境中,可以使用mock接口进行快速开发和测试,而在生产环境中,则使用真实的服务器接口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值