关于Heroku上的python:webpack和django:collectstatic之前捆绑

webpack and django on Heroku: bundling before collectstatic

我正在使用django-npm在Heroku上构建django react应用程序,该应用程序会自动将所有模块从package.json安装到node-modules dir,然后在python manage.py collectstatic期间将所有内容复制到staticfiles/(由Heroku触发)部署)。

但是,要使此配置生效,我需要在部署之前预先捆绑我的React应用,并将其与所有CSS,字体等一起放入我的static文件夹中,以便稍后由collectstatic拾取。

但是我不想用新的捆绑软件版本污染我的git diff。那么,有没有一种方法可以使Webpack在部署期间创建捆绑包?

我知道Heroku上有一个release命令,可以在其中放置我的npm run build。但是问题是它只会在collectstatic之后触发,因此我的捆绑包只会在扫描此文件夹后在static/文件夹中创建,并且不会被复制到staticfiles dir。


更新:
从2019年3月11日起,不再需要使用bin/pre_compile。Heroku现在将在Heroku \\的构建过程中自动调用应用程序的build脚本(如果在package.json中定义)。资料来源:Heroku Changelog。

原始:您可以使用heroku/python buildpack公开的(未记录)pre_compile挂钩来完成此操作。

在应用程序的顶层添加一个名为bin/pre_compile的可执行shell文件,该文件将在构建过程中自动调用。

1
2
3
4
5
cd my-django-app
mkdir bin
echo '#!/usr/bin/env bash' >> bin/pre_compile
echo 'npm run build' >> bin/pre_compile
chmod +x bin/pre_compile