npm 如何同时运行服务器和React应用程序?

tvmytwxo  于 2022-12-27  发布在  React
关注(0)|答案(2)|浏览(162)

在之前的一个复杂得多的项目中,我和其他人一起构建了一个类,我们能够为React应用程序运行npm start,和nodemon的服务器没有问题。我现在试图建立一个简单的单页Web应用程序与create-react-app和意识到我不能运行我的服务器和我的React应用程序在同一端口。我得到一条消息说"端口3000上已经运行了一些东西。"不确定以前是如何完成的。
它们是否需要运行在同一个端口上才能通信?
如果是或否,最佳做法是什么?
不知道要显示什么代码,所以到目前为止,我已经包含了我的package.json和我的server.js代码。任何帮助或提示都很感谢!

const express = require('express')

const app = express()
const cors = require("cors")

app.use(cors)
app.use(express.json()) 

app.listen(3000, () => {
    console.log("Server is running")
})
{
  "name": "project",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "cors": "^2.8.5",
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "pg": "^8.8.0",
    "pg-hstore": "^2.3.4",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-scripts": "5.0.1",
    "sequelize": "^6.27.0",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "main": "./server/server.js"
}

到目前为止,我试着同时使用,和npm-run-all,但是这似乎会破坏react应用程序和服务器。
不幸的是,以前构建的应用程序是坏修复(至少以我目前的技能)除了npm start命令。旧项目和我的新项目之间的主要区别是旧项目有一个不同的package.json用于服务器和react应用程序。在这两个包之间,我对我当前项目的依赖是相同的。除此之外,我能找到的唯一区别是,而不是"主要":"./server/server.js"在我的单个package.json中,react应用在它的react package. json中包含以下内容:

"proxy": "http://127.0.0.1:4000"

不确定这是否会起作用,因为旧项目中的react应用程序仍然在端口3000上启动。我已经尝试使用"代理"代码运行我当前的项目,但它没有任何影响。

jmo0nnb3

jmo0nnb31#

当您在同一台机器或计算机上运行服务器和客户端(React App)时(意味着它们可通过localhost访问),它们应该在不同的端口上运行。
当在React App的package.json中找到"proxy": "http://127.0.0.1:4000"时,这意味着您的客户端(React App)尝试调用端口4000上的服务器。您可以在https://create-react-app.dev/docs/proxying-api-requests-in-development/中阅读有关"proxy"字段的更多信息。
默认情况下,React应用程序在端口3000上运行。因此,我建议将您的server.js中的端口号更改为4000。

xpszyzbs

xpszyzbs2#

如果你想使并行命令。我会推荐Lerna这是非常有帮助的monorepo。与单comandd我们可以下载所有项目的npm模块,同样可以启动所有项目与单一cmd和相同的方式构建.流这得到一些想法lerna working sample
此循环包含有关the common node modules的详细信息
我认为最好的选择是在开发环境中使用两个端口来服务客户端应用程序和服务器。

相关问题