是否可以使用单个package.json在Heroku上托管MERN应用程序?

Dweep Panchal

我读了很多关于Heroku上的MERN应用程序部署的博客,但是它们都为客户端和服务器使用了单独的package.json!

是否可以使用一个package.json文件?

我的项目结构

我的package.json

{
  "name": "ecommerce",
  "version": "0.1.0",
  "private": true,
  "author": "Dweep Panchal",
  "license": "ISC",
  "dependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.5.0",
    "@testing-library/user-event": "^7.2.1",
    "braintree-web-drop-in-react": "^1.1.1",
    "concurrently": "^5.2.0",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-router-dom": "^5.1.2",
    "react-scripts": "3.4.1",
    "react-stripe-checkout": "^2.6.3",
    "body-parser": "^1.19.0",
    "braintree": "^2.22.0",
    "cookie-parser": "^1.4.5",
    "cors": "^2.8.5",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "express-jwt": "^5.3.3",
    "express-validator": "^6.4.0",
    "formidable": "^1.2.2",
    "jsonwebtoken": "^8.5.1",
    "lodash": "^4.17.15",
    "mongoose": "^5.9.7",
    "stripe": "^8.46.0",
    "uuid": "^7.0.3"
  },
  "scripts": {
    "server": "cd ./backend && node app.js",
    "start": "concurrently \"npm run server\" \"react-scripts start\"",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "proxy": "http://localhost:8000",
  "devDependencies": {
    "nodemon": "^2.0.3"
  },
  "engines": {
    "node": "10.16.0",
    "npm": "6.9.0"
  }
}

app.js

require("dotenv").config({ path: "../.env" });
const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const cors = require("cors");

const app = express();

// Routes
const authRoutes = require("./routes/auth");
const userRoutes = require("./routes/user");
const categoryRoutes = require("./routes/category");
const productRoutes = require("./routes/product");
const orderRoutes = require("./routes/order");
const stripeRoutes = require("./routes/stripepayment");
const braintreeRoutes = require("./routes/braintreepayment");

// DB Connection
mongoose
  .connect(
    `mongodb+srv://${process.env.DB_NAME}:${process.env.DB_PASS}@${process.env.DB_PROJECT}-xi8tq.mongodb.net/${process.env.DB_PROJECT}?retryWrites=true&w=majority`,
    {
      useNewUrlParser: true,
      useCreateIndex: true,
      useUnifiedTopology: true,
      useFindAndModify: true,
    }
  )
  .then(() => console.log("DB Connected!"))
  .catch(() => console.log("Failed to Connect DB"));

// Middleware
app.use(bodyParser.json());
app.use(cookieParser());
app.use(cors());

// My Routes
app.use("/api", authRoutes);
app.use("/api", userRoutes);
app.use("/api", categoryRoutes);
app.use("/api", productRoutes);
app.use("/api", orderRoutes);
app.use("/api", stripeRoutes);
app.use("/api", braintreeRoutes);

// Server Connection
const port = process.env.BACKEND_PORT || 8000;

app.listen(port, () => console.log(`Server Running at Port ${port}`));

当我在heroku上部署此应用程序时,项目URL显示:

无效的主机头

整个项目: https : //github.com/dweep612/ecommerce

亨利·李

让我快速解释一下如何部署任何Reactjs并表达给heroku工作。目标是使用npm run build生成一个构建文件夹,然后启动服务器以从该构建文件夹提供静态内容。

在heroku文档中,它指出heroku-postbuild在启动脚本之前运行。这是执行npm run build生成生成文件夹,然后使用启动脚本运行服务器代码的理想场所。从那里,服务器应使用express.static并指向生成生成文件夹的位置。

这就是为什么人们喜欢使用服务器package.json的原因,因为它不会干扰react start脚本。现在,我立即看到的问题是您没有正确使用脚本,也没有指向您要生成的构建文件夹。

在package.json中,创建一个启动脚本以启动app.js文件,然后创建一个heroku-postbuild来生成构建文件夹。像下面

"scripts": {
    "start": "cd ./backend && node app.js",
    "heroku-postbuild": "npm run build",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },

之后,您应该app.use(express.static(<<location of build folder>>))在app.js中。在您的app.js中添加以下代码

if (process.env.NODE_ENV === "production") {
  app.use(express.static("../build"));
}

我说../build的原因是因为您的build文件夹在后端文件夹之外。

我还检查了您的整个代码,还有其他小的配置问题。例如,如果要部署到heroku,则应使用process.env.PORT

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可以使用Cloud9编辑Heroku上托管的PHP应用程序吗?

来自分类Dev

我是否需要安装PHP和Composer才能在Heroku上托管应用程序?

来自分类Dev

在单个VPS上托管多个应用程序/服务

来自分类Dev

使用AzureDevOps更新Azure上托管的Sitecore应用程序

来自分类Dev

如何在Nginx上托管的单个域下托管多个Flask应用程序?

来自分类Dev

如何对Azure上托管的Web应用程序和window的IIS服务器上托管的Web应用程序使用相同的自定义域?

来自分类Dev

从PHP应用程序使用Google Cloud Storage(不在App Engine上托管)

来自分类Dev

使用Rack在非根路径上托管Sinatra应用程序

来自分类Dev

使用Visual Studio Code调试VM上托管的节点应用程序

来自分类Dev

使用Rack在非root用户路径上托管Sinatra应用程序

来自分类Dev

使用Nginx + Unicorn在子文件夹上托管多个Rails应用程序

来自分类Dev

如何使用Puma和Nginx配置在子URL上托管的Rails 3应用程序?

来自分类Dev

Heroku 免费套餐 - 单个应用是否可以使用所有 Dyno 配额?

来自分类Dev

是否可以使用Google App Engine托管多个应用程序?

来自分类Dev

是否可以在Web应用程序上托管录音机和编辑器?如何?

来自分类Dev

是否可以使用Katana在WinForms应用程序中托管现有WebForms应用程序?

来自分类Dev

您是否建议对Azure App Services上托管的应用程序使用bunyan或morgan之类的记录器

来自分类Dev

在Heroku上托管使用Wepback构建的量产React应用

来自分类Dev

使用Nodejs是否可以使用桌面应用程序?

来自分类Dev

是否可以使用PHP开发Windows应用程序?

来自分类Dev

是否可以使用内置终端调试应用程序

来自分类Dev

是否可以使用JavaScript制作GUI应用程序?

来自分类Dev

是否可以使用Xcui测试Web应用程序?

来自分类Dev

如何在不使用Google App引擎的情况下在专用服务器上托管Go应用程序

来自分类Dev

如何在不使用Google App引擎的情况下在专用服务器上托管Go应用程序

来自分类Dev

如何将spiderable与在memory.io上托管的流星应用程序一起使用

来自分类Dev

使用Nginx,Socket.io和Node.js在树莓派上托管Angular应用程序

来自分类Dev

使用 Apache 在同一个域上托管两个 Web 应用程序

来自分类Dev

使用 apahe 和 tomcat 在同一台服务器上托管 faceook 应用程序和网站

Related 相关文章

  1. 1

    可以使用Cloud9编辑Heroku上托管的PHP应用程序吗?

  2. 2

    我是否需要安装PHP和Composer才能在Heroku上托管应用程序?

  3. 3

    在单个VPS上托管多个应用程序/服务

  4. 4

    使用AzureDevOps更新Azure上托管的Sitecore应用程序

  5. 5

    如何在Nginx上托管的单个域下托管多个Flask应用程序?

  6. 6

    如何对Azure上托管的Web应用程序和window的IIS服务器上托管的Web应用程序使用相同的自定义域?

  7. 7

    从PHP应用程序使用Google Cloud Storage(不在App Engine上托管)

  8. 8

    使用Rack在非根路径上托管Sinatra应用程序

  9. 9

    使用Visual Studio Code调试VM上托管的节点应用程序

  10. 10

    使用Rack在非root用户路径上托管Sinatra应用程序

  11. 11

    使用Nginx + Unicorn在子文件夹上托管多个Rails应用程序

  12. 12

    如何使用Puma和Nginx配置在子URL上托管的Rails 3应用程序?

  13. 13

    Heroku 免费套餐 - 单个应用是否可以使用所有 Dyno 配额?

  14. 14

    是否可以使用Google App Engine托管多个应用程序?

  15. 15

    是否可以在Web应用程序上托管录音机和编辑器?如何?

  16. 16

    是否可以使用Katana在WinForms应用程序中托管现有WebForms应用程序?

  17. 17

    您是否建议对Azure App Services上托管的应用程序使用bunyan或morgan之类的记录器

  18. 18

    在Heroku上托管使用Wepback构建的量产React应用

  19. 19

    使用Nodejs是否可以使用桌面应用程序?

  20. 20

    是否可以使用PHP开发Windows应用程序?

  21. 21

    是否可以使用内置终端调试应用程序

  22. 22

    是否可以使用JavaScript制作GUI应用程序?

  23. 23

    是否可以使用Xcui测试Web应用程序?

  24. 24

    如何在不使用Google App引擎的情况下在专用服务器上托管Go应用程序

  25. 25

    如何在不使用Google App引擎的情况下在专用服务器上托管Go应用程序

  26. 26

    如何将spiderable与在memory.io上托管的流星应用程序一起使用

  27. 27

    使用Nginx,Socket.io和Node.js在树莓派上托管Angular应用程序

  28. 28

    使用 Apache 在同一个域上托管两个 Web 应用程序

  29. 29

    使用 apahe 和 tomcat 在同一台服务器上托管 faceook 应用程序和网站

热门标签

归档