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

时间:2019-10-31 08:59:11

标签: django reactjs heroku

我成功地将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。
但是,有没有更简单的方法?

2 个答案:

答案 0 :(得分:1)

您可以在heroku中添加索引的buildpack。看一下here,将多个buildpack添加到您的项目中。

我写了一个简单的教程,介绍如何deploy a React + Django app to Heroku。如果您有兴趣,可以看看。就您而言,您只需要添加构建包的说明。

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

您无需设置任何其他命令即可构建React应用。 Heroku从您的build文件中自动安装并运行package.json脚本(如果位于项目根目录中)。

答案 1 :(得分:0)

我找到了一种方法。
我添加了nodejs buildpack作为第一个,然后在根目录中创建了一个{ "name": "myapp", "version": "1.0.0", "scripts": { "build": "cd react && npm install && npm run build" }, "dependencies": {}, "devDependencies": {}, "cacheDirectories": [ "node_modules", "react/node_modules" ] } 文件:

function decodeEntity(str) {
var txt = document.createElement("div");
txt.innerHTML = str;
return txt.innerHTML;
}
$('a').attr('href',decodeEntity('/speed/my–site'));

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