我现在有一个项目是这样的,前端是用 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. }

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

  1. $ npm run start

就会跑 3000 端口。

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

  1. $ cd backend
  2. $ npm run start

就会跑 8080 端口。

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

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

解决方法如下:

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

  1. $ npm i concurrently --save

  2. $ 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

界面如下:

原文访问

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

  1. [sqoop1.99.7] sqoop入门-下载、安装、运行和常用命令

    一.简介 Apache Sqoop is a tool designed for efficiently transferring data betweeen structured, semi-str ...

  2. 自定义实现InputFormat、OutputFormat、输出到多个文件目录中去、hadoop1.x api写单词计数的例子、运行时接收命令行参数,代码例子

    一:自定义实现InputFormat *数据源来自于内存 *1.InputFormat是用于处理各种数据源的,下面是实现InputFormat,数据源是来自于内存. *1.1 在程序的job.setI ...

  3. [每天一个Linux小技巧] gdb 下一次运行多个命令

    一般gdb运行的时候,我们仅仅能输入一个命令. 如: (gdb) c (gdb) bt 假设想运行多个命令怎么办? 能否像bash那样, 使用; 如 ls; ls 结论是不行. 但能够通过gdb 内建 ...

  4. 【夸QT十一】外来物品:通用脚本帮助Web运行基础Linux命令

    需求分析: 需要注意的是在这里第一次,这个人是不是QT系列文章,它是关于Web的,之所以写这篇文章.这是因为碍着Web相关开发时间,而且往往涉及linux与底层指令处理.例如,创建一个文件夹,删除一个 ...

  5. 在Ubuntu下运行 apt-get update命令后出现错误:

    在Ubuntu下运行 apt-get update命令后出现错误: The package lists or status file could not be parsed or opened sud ...

  6. sublime将python的运行结果在命令行显示

    sublime将python的运行结果在命令行显示 为什么这么折腾? 因为每次查看输出结果都要上下拖动窗口,很烦. 将build system修改为 { "cmd": [" ...

  7. Quartz的集群模式和单机模式共存-让一个非集群的Quartz与集群节点并行着运行

    假如你让一个非集群的 Quartz 应用与集群节点并行着运行,设法使用 JobInitializationPlugin和 RAMJobStore Quartz支持可选节点执行jobquartz集群,会 ...

  8. linux查看是否有某个运行的进程命令

    linux查看是否有某个运行的进程命令:例如,查询是否包含 “my_post” 关键字的进程 ps aux | grep my_post ps aux | grep  my_post | grep - ...

  9. 千万不要运行的 Linux 命令

    本文中列出的命令绝对不可以运行,即使你觉得很好奇也不行,除非你是在虚拟机上运行(出现问题你可以还原),因为它们会实实在在的破坏你的系统.所以不在root等高级管理权限下执行命令是很好的习惯. 本文的目 ...

随机推荐

  1. Qt 子线程更新Ui

    最近做练习,写一个Qt版的飞机大战,需要用子线程更新UI,发现Qt子线程不能更新Ui,否则程序会崩溃.在网上百度了下,说是需要在子线程自定义信号,然后在线程回调的run()函数里发射信号,主线程连接信 ...

  2. 208道Java常见的面试题

    一.Java 基础 1.JDK 和 JRE 有什么区别? JRE=JVM+各种基础类库+java类库(String\System) JDK>JRE>JVM JRE:是java运行时环境  ...

  3. MySQL Backup--innobackupex操作日志

    备份脚本: innobackupex \ --defaults-file="/export/servers/mysql/etc/my.cnf" \ --host="loc ...

  4. 22,Django常用命令

    学习Django你需要了解常见命令的使用,比如创建项目,创建应用,创建超级用户,数据表创建及更新,启动服务器等.这些命令都包含在django-admin.py和manage.py里.除此以外manag ...

  5. Linux命令——systemctl

    前言 systemctl本身的意义并不仅仅是一个命令那么简单,他标志着SysV时代的终结,Systemd时代的开始.CentOS 7.X系列已经抛弃SysV,全面拥抱Systemd这个init sys ...

  6. ISCC之msc_无法运行的exe

    打开hxd,里面老长一串base64 解码试了一下,解出来是png文件头,但是图片有错误 百度了一下,PNG文件头是89 50 4E 47 0D 0A 1A 0A 再回去看 改成0A了事, 出来一张二 ...

  7. springboot集成redis 附redis基本操作类

    1 pom.xml添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...

  8. java连接Oracle数据库的操作说明

    在测试中,我们常常需要连接Oracle数据库来进行查询对比.下面,我们就来看看,如何使用java代码来连接数据库,并且取出我们想要的数值. 首先,java中如果要连接Oracle数据库,需要jdbc的 ...

  9. CF553E Kyoya and Train

    Kyoya and Train 一个有\(n\)个节点\(m\)条边的有向图,每条边连接了\(a_i\)和\(b_i\),花费为\(c_i\). 每次经过某一条边就要花费该边的\(c_i\). 第\( ...

  10. md5关于加密

    # 导入hashlib模块 import hashlib # 获取MD5对象 # 不加盐操作 # md5 = hashlib.md5() # 加盐操作 md5 = hashlib.md5('wenwe ...