Разработка Wiki-системы
Wiki — гипертекстовая база знаний с открытым (или ограниченным) редактированием. В отличие от базы знаний с выраженной иерархией, Wiki строится на перекрёстных ссылках между страницами. Ключевые особенности: [[WikiLinks]] между статьями, история изменений с diff, система обсуждений и гибкие права на редактирование.
Навигация и структура
Wiki допускает несколько способов навигации:
- Иерархия — традиционное дерево страниц
- Граф — страницы связаны ссылками, визуализация как граф знаний
- Теги — поперечная классификация
- Поиск — основной инструмент навигации
Для каждой Wiki-страницы автоматически строится backlinks — список страниц, которые ссылаются на текущую. Это ключевая функция для понимания связей между концепциями.
Разметка и синтаксис
Стандартный вариант — Markdown с расширениями:
-
[[Название страницы]]— Wiki-ссылка, автосоздание страницы если не существует -
[[Страница|Отображаемый текст]]— ссылка с псевдонимом -
![[Страница]]— встраивание содержимого другой страницы (transclusion) -
#Тег— теги прямо в тексте
Парсинг Wiki-ссылок: регулярное выражение обходит текст, находит [[...]], проверяет наличие страницы в базе, генерирует <a> с существующей ссылкой или классом wiki-link-new для несуществующих.
История изменений и diff
Каждое сохранение создаёт revision. Diff отображается построчно: алгоритм Myers diff или библиотека diff (npm):
import { diffLines } from 'diff';
const changes = diffLines(oldContent, newContent);
changes.forEach(part => {
if (part.added) console.log('[+]', part.value);
if (part.removed) console.log('[-]', part.value);
});
Rollback — восстановление любой версии с созданием нового revision (история не удаляется).
Конфликты при совместном редактировании
Если два пользователя редактируют одну страницу одновременно:
- Pessimistic locking — страница блокируется при открытии редактора (простое решение, но неудобное)
- OT (Operational Transformation) — алгоритм слияния изменений в реальном времени (Yjs, ShareDB)
- Conflict on save — последний сохранивший «побеждает», первому показывается diff с конфликтом
Для большинства корпоративных Wiki достаточно предупреждения «страница редактируется» + merge on conflict.
Права доступа
Модели управления доступом:
- Публичная (Wikipedia-модель): читают все, редактируют зарегистрированные, откат вандализма через историю
- Корпоративная: только сотрудники, некоторые разделы — только конкретные команды
- Смешанная: публичные разделы + закрытые для внутренних процессов
Шаблоны страниц
Для повторяющихся типов статей — шаблоны: «Описание проекта», «Встреча», «Постмортем», «Инструкция». При создании страницы выбирается шаблон, структура заполняется.
Интеграции
- Git-backend — страницы хранятся в Git-репозитории (Markdown-файлы). История = Git commits. Редактирование через веб или напрямую в Git.
- Slack/Telegram — уведомления при изменении отслеживаемых страниц
- Confluence API — миграция существующей базы
Сроки
MVP (страницы с Wiki-ссылками, история, поиск, базовые права): 6–8 недель. Полная Wiki с граф-навигацией, шаблонами, OT-редактированием и интеграциями: 3–4 месяца.







