mod: обновить сборку и документацию CodeMirror 6
This commit is contained in:
92
frontend-assembly/README.md
Normal file
92
frontend-assembly/README.md
Normal file
@@ -0,0 +1,92 @@
|
||||
# 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-бандл для подключения в админке.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user