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