Обработка очистки кеша и разделения фрагментов с минимальной настройкой. Благодаря Django Manifest Loader. Чтобы получить более подробное руководство, посмотрите мой другой пост на эту тему здесь.

Шаг 1

npm install --save-dev webpack-manifest-plugin clean-webpack-plugin

Установите WebpackManifestPlugin (обязательно) и CleanWebpackPlugin (необязательно, но рекомендуется) и настройте с помощью уже существующей конфигурации веб-пакета.

// webpack.config.js
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const {WebpackManifestPlugin} = require('webpack-manifest-plugin');
module.exports = {
    ...
  plugins: [
      new CleanWebpackPlugin(),
      new WebpackManifestPlugin(), 
  ],
   ...
};

Шаг 2

Установите Django Manifest Loader

pip install django-manifest-loader

Шаг 3

Настройте параметры Django

# settings.py
INSTALLED_APPS = [
    ...
    'manifest_loader'
    ...
]
STATICFILES_DIR = [
    BASE_DIR / 'dist'  
]

STATICFILES_DIR должен иметь каталог, в который выводится webpack. В этом примере веб-пакет будет выводить на dist, который находится на верхнем уровне проекта.

Шаг 4

Используйте его в своем шаблоне

<!-- index.html -->
{% load manifest %}
<script src="{% manifest 'main.js' %}" />

Вот и все.

Если main.js было именем вашего файла до того, как его обработал webpack, а теперь имя файла main.e12def973.js, то приведенный выше код шаблона будет отображаться как:

<!-- index.html -->
<script src="/static/main.e12def973.js" />

Вышеприведенное подходит для очистки кеша или известного количества разделенных фрагментов. Если вам нужно ввести неизвестное количество фрагментов, вы можете использовать тег сопоставления с образцом, чтобы получить все соответствующие файлы:

<!-- index.html -->
{% load manifest %}
{% manifest_match '*.js' '<script src="{match}" />' %}

Что, согласно вашему файлу манифеста, может отображать что-то вроде:

<!-- index.html -->
<script src="/static/vendors~main.d22def8311.js" />
<script src="/static/main.e12def973.js" />

Я не знаю, пытались ли вы когда-нибудь решить эту проблему до Django Manifest Loader, но если да, то вы знаете, что это было не весело.

✌️