Monaco Editor традиционно считается одним из самых мощных и гибких редакторов кода для веб-приложений. Он оказался в основе редактора кода Visual Studio Code (VSCode), благодаря чему пользуется огромной популярностью среди разработчиков. Однако сама библиотека Monaco Editor отличается громоздкостью, сложной настройкой и требованием вручную конфигурировать различные среды, веб-воркеры и загрузчики CSS. В результате появилась необходимость в более современной, легкой, удобной и расширяемой реализации этого редактора. Решением стал современный Monaco Editor или modern-monaco — проект, который переосмысливает классический редактор в духе новых стандартов и оптимизаций.
Современный Monaco предлагает разработчикам удобный и быстрый браузерный редактор кода с упрощенной архитектурой, поддержкой разнообразных функций, синтаксическим подсвечиванием благодаря Shiki, а также возможностью интеграции с языковым сервером и многими другими функциями, знакомыми по VSCode. Что отличает modern-monaco от прежних версий и аналогов? Первое – упрощенная загрузка и инициализация без необходимости сложных настроек среды выполнения, окружения MonacoEnvironment и множества веб-воркеров. Вместо этого используется интеллектуальная ленивная загрузка, при которой подсветка кода с помощью Shiki происходит мгновенно, еще до полной загрузки основного ядра редактора. Таким образом, ускоряется время старта и повышается отзывчивость интерфейса. Благодаря такой архитектуре, modern-monaco отлично подходит как для серверного рендеринга, так и для одностраничных приложений (SPA).
Серверный рендеринг (SSR) — это одна из ключевых возможностей, которая позволяет сразу отдавать пользователю предварительно отформатированный и с подсветкой код, а затем «гидратировать» полноценный редактор на клиенте. Такой подход улучшает SEO-показатели и уменьшает время загрузки. Кроме того, modern-monaco поддерживает работу с полноценной рабочей областью (workspace) по образцу Visual Studio Code с управлением файловой системой, историей изменений и синхронизацией документов. По умолчанию для хранения используется IndexedDB, однако проект также предусматривает возможность внедрения пользовательских файловых систем с собственными алгоритмами синхронизации и сохранения. Одной из важных особенностей является использование Shiki — высококачественного механизма подсветки синтаксиса, который обладает обширной поддержкой грамматик и тем оформления.
Благодаря этому редактор может поддерживать широкий спектр языков программирования и настраиваемых тем, обеспечивая привлекательное и удобное отображение кода. Управление темами и грамматиками происходит динамически — они подгружаются с CDN по требованию, что оптимизирует потребление ресурсов и снижает размер основного пакета приложения. Чтобы запустить modern-monaco в браузере, достаточно добавить кастомный HTML-элемент <monaco-editor> и инициализировать редактор с помощью функции lazy. Это значительно упрощает интеграцию и избавляет разработчика от рутинной настройки отдельных компонентов и рабочих процессов. Помимо ленивой загрузки, проект поддерживает ручное создание и конфигурирование редактора.
При этом можно использовать собственные темы, заранее загруженные языковые грамматики и дополнения, что делает modern-monaco гибким инструментом как для типовых проектов, так и для уникальных решений. В работе с современным Monaco также реализованы важные функции для разработки с использованием TypeScript и JavaScript. Поддерживаются полноценные Language Servers Protocol (LSP) для таких языков, как HTML, CSS, SCSS, LESS, JavaScript, TypeScript и JSON. Это позволяет обеспечить автодополнение кода, подсветку ошибок, навигацию по проекту и другие продвинутые функции, которые ранее были доступны только в профессиональных IDE. Причем пользователям не нужно самостоятельно конфигурировать и запускать друзяющихся воркеров LSP — все необходимые сервисы загружаются и управляются автоматически.
Особое внимание уделено работе с import maps — современным стандартом для организации и разрешения зависимостей в JavaScript и TypeScript. Ни одно современное веб-приложение не обходится без разумной структуры импортов, и modern-monaco понимает эту необходимость, автоматически интегрируя поддержку import maps, что позволяет разработчикам легко работать с внешними библиотеками и пакетами в безопасной и удобной форме. Для настройки TypeScript возможна интеграция файла tsconfig.json непосредственно в рабочую область. Это означает и возможность экспериментировать с разными конфигурациями компилятора, гибко подстраивая параметры трансляции кода под конкретные задачи.
Это особенно важно для обеспечения строгости типов и качества программного кода. Modern-monaco радует и разработчиков, которые хотят настраивать темы и грамматики максимально гибко. Можно использовать стандартные темы от Shiki, либо загружать собственные настройки из файлов tm-themes или tm-grammars, а также интегрировать собственные грамматики языка. Это расширяет поле для кастомизации и позволяет создавать уникальные пользовательские редакторы, ориентированные на специфические языки и стили оформления. Кроме того, связка modern-monaco и VSCode window APIs, таких как showInputBox и showQuickPick, приближает опыт пользователя к возможностям полноценных IDE, создавая удобный пользовательский интерфейс для интерактивных действий, выбора опций и ввода данных прямо в редакторе.
Одним словом, modern-monaco — это не просто очередной форк Monaco Editor, а качественно новая платформа, которая объединяет мощь классического редактора и современный подход к веб-разработке. Легкая, хорошо масштабируемая, с богатой интеграцией и поддержкой как клиентского, так и серверного рендеринга — она отлично подходит для разработки как маленьких приложений с минимумом зависимостей, так и масштабных проектов с множеством подключаемых языков и расширений. Для разработчиков, веб-студий и компаний, которые хотят предлагать своим пользователям мгновенный доступ к функциональному редактору с поддержкой подсветки, автодополнения и рабочего пространства, modern-monaco станет ценным решением. Важным плюсом является лицензия MIT — открытая и свободная, что позволяет использовать, изменять и распространять проект без ограничений. В итоге современный Monaco Editor сочетает в себе стремление к максимальной производительности, удобству использования и расширяемости.
Его экосистема сопровождается активным развитием, и многие новые возможности появляются с выходом новых версий. Этот проект отвечает запросам времени, упрощая разработки, ускоряя загрузку, снижая затраты на интеграцию и создавая по-настоящему универсальный и надежный редактор кода для веб-приложений.