Heroku 在通过 Django 部署之前构建 React 应用程序

Posted

技术标签:

【中文标题】Heroku 在通过 Django 部署之前构建 React 应用程序【英文标题】:Heroku build React app before deploying through Django 【发布时间】:2020-02-26 14:28:36 【问题描述】:

我成功地将我的 Django 项目部署到 Heroku。但我希望能够在部署之前自动构建 React。

React 应用程序是通过 Django 提供的,所以我的模板和 Django 应用程序的静态文件夹中有 React 的捆绑文件。

项目结构如下所示:

react/
  build/
  components/
  App.js
  package.json
  ...
django/
  templates/
  static/
  ...
Procfile
requirements.txt
Pipfile

我在同一个存储库中同时拥有 React 和 Django 项目,我想在部署 Django 之前自动运行 npm run build

我设置了构建脚本以将捆绑的文件从 React 移动到 Django。

根据我的阅读,我需要添加 NodeJS buildpack,但我不知道如何将其设置为在 Python buildpack 之前运行。

基本上,NodeJS 进程应该只是构建我的 React 应用程序然后终止。之后,Python 进程应该启动并部署 Django 项目。

一种解决方案是使用 Docker 并将该映像部署到 Heroku。 但是,有没有更简单的方法?

【问题讨论】:

【参考方案1】:

您可以在 heroku 中添加索引构建包。查看 here 为您的项目添加多个构建包。

我写了一个关于如何deploy a React + Django app to Heroku 的简单教程。有兴趣的可以看看。在您的情况下,您只需要添加构建包的说明。

$ heroku buildpacks:add --index 1 heroku/nodejs
$ heroku buildpacks:add --index 2 heroku/python

您不需要设置任何额外的命令来构建React 应用程序。 Heroku 会自动从您的 package.json 文件(如果它在项目根目录中)安装并运行 build 脚本。

【讨论】:

我在 react/ 文件夹中有 package.json,所以它不在项目根目录中。我可以告诉 Heroku nodejs buildpack 的工作目录吗?如果没有,我可能会尝试更改结构,以便 package.json 在根目录中 您可以通过修改Procfile 来实现这一点。 This 可能会对您有所帮助。【参考方案2】:

我找到了一种方法。 我将 nodejs buildpack 添加为第一个,然后在根目录中创建了一个 package.json 文件:


  "name": "myapp",
  "version": "1.0.0",
  "scripts": 
    "build": "cd react && npm install && npm run build"
  ,
  "dependencies": ,
  "devDependencies": ,
  "cacheDirectories": [
    "node_modules",
    "react/node_modules"
  ]


Heroku 在 root 目录中寻找 package.json 并自动运行 build 命令。

【讨论】:

以上是关于Heroku 在通过 Django 部署之前构建 React 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 上使用 Django Rest Framework 后端部署 Angular 4 前端

在heroku中反应+ django部署并且图像没有通过

部署到 Heroku 时 Django 应用程序崩溃 - Worker 无法启动

Heroku 卡在为 Django 应用程序构建源代码

我想在 Heroku 上部署一个 Django 应用程序,但出现错误

Django React -- Heroku 上的部署错误(找不到页面 404)