3.9 KiB
frontend-assembly
Эта папка отвечает за сборку CodeMirror 6 для админки Django.
Идея здесь простая: код редактора собирается как готовый минифицированный бандл,
а в репозиторий и в public/static попадает только итоговый результат.
Что здесь лежит
package.json
Главный файл npm-проекта.
В нём описано:
- имя сборочного пакета;
- версия;
- зависимость от
esbuildи пакетов CodeMirror 6; - npm-скрипт
build.
Скрипт build собирает src/editor.js в файл:
../public/static/codemirror/editor.js
При сборке используется --minify, потому что редактор нужен как готовый
чёрный ящик для админки, а не как объект для отладки.
package-lock.json
Файл фиксации версий npm-зависимостей.
Он нужен, чтобы сборка была воспроизводимой:
npm ciставит ровно те версии, которые уже зафиксированы;- одинаковый результат получается и на деве, и на любой другой машине;
- при повторной сборке не подтягиваются случайные новые версии пакетов.
build-codemirror6.sh
Основной скрипт сборки.
Он делает всё сам:
- проверяет наличие
npm; - создаёт временную рабочую папку;
- временно создаёт там
src/editor.js; - устанавливает зависимости через
npm ci; - запускает
npm run build; - кладёт готовый бандл в
public/static/codemirror/editor.js; - удаляет временные
src/иnode_modules/после завершения.
Это означает, что в рабочем дереве не остаётся мусора от сборки.
src/editor.js
Временный исходник редактора.
Он не хранится в репозитории как постоянный файл: скрипт создаёт его во временной директории только на время сборки.
Внутри этого файла живёт минимальная инициализация CodeMirror 6:
- HTML-режим;
- JavaScript-режим;
- CSS-режим;
- тема
oneDark; - перенос строк.
Если позже захочется менять поведение редактора, логика правится либо в шаблоне, который выдаёт этот исходник, либо прямо в сборочном скрипте.
public/static/codemirror/editor.js
Готовый результат сборки.
Именно этот файл должен подключаться в Django-админке. Он уже минифицирован и готов к использованию как обычная статика.
Как запускать сборку
Из корня проекта:
bash ./frontend-assembly/build-codemirror6.sh
После успешного запуска в проекте должен обновиться только один полезный артефакт:
public/static/codemirror/editor.js
Коротко о логике работы
Смысл этой папки такой:
- собрать CodeMirror 6 один раз;
- не держать в репозитории и контейнере лишний фронтенд-мусор;
- оставить Django только готовый JS-бандл для подключения в админке.