Heroku 上的 webpack 和 django:collectstatic 之前的捆绑
Posted
技术标签:
【中文标题】Heroku 上的 webpack 和 django:collectstatic 之前的捆绑【英文标题】:webpack and django on Heroku: bundling before collectstatic 【发布时间】:2018-02-25 06:28:06 【问题描述】:我正在 Heroku 上构建一个 django+react 应用程序,使用 django-npm
自动安装从 package.json
到 node-modules
目录的所有模块,然后在 python manage.py collectstatic
期间将所有内容复制到 staticfiles/
(由 Heroku 触发在部署期间)。
但是,要使此配置正常工作,我需要在部署之前预先捆绑我的 React 应用程序,并将其与所有 CSS、字体等一起放入我的 static
文件夹中,以便稍后由 collectstatic
获取。
但我不想用新的捆绑版本污染我的 git 差异。那么,有没有办法让 webpack 在部署时创建一个 bundle?
我知道 Heroku 上有一个 release
命令,我可以在其中放置我的 npm run build
。但问题是它只在collectstatic
之后触发,所以我的包只会在扫描此文件夹后在static/
文件夹中创建,并且不会被复制到staticfiles
目录。
【问题讨论】:
为什么不在 npm build 之后在 heroku release 命令中重新运行 collectstatic。类似release: npm run build && python manage.py collectstatic
【参考方案1】:
更新:
自 2019 年 3 月 11 日起,不再需要使用 bin/pre_compile
。Heroku 现在将在 Heroku 的构建过程中自动调用应用程序的 build
脚本(如果在 package.json
中定义)。来源:Heroku Changelog。
原文:您可以使用heroku/python
buildpack 公开的(未记录的)pre_compile
挂钩来完成此操作。
在应用的顶层添加一个名为 bin/pre_compile
的可执行 shell 文件,它会在构建过程中为 called automatically。
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
【讨论】:
以上是关于Heroku 上的 webpack 和 django:collectstatic 之前的捆绑的主要内容,如果未能解决你的问题,请参考以下文章
Express/Webpack 在 dokku 和 heroku 上失败
如何将 Rails + Webpacker 应用程序部署到 Heroku?
在 Heroku 上部署 AngularJs + webpack + gulp