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