Не удается загрузить режим редактора Ace.js и темы (проект пространства имен и AMD require.js & grunt

У нас есть большое javascript-приложение, которое полностью разделено именами. Мы используем require.js для загрузки всего (требует жизни в пространстве имен). Затем мы используем grunt для компиляции файлов 100+/- js, включая библиотеки, в один минимизированный файл.

Я могу загрузить ace.js

define(['ace/ace'], function (ace) {....

Я могу создать такой редактор, как

var editor = ace.edit("editor");

Я не уверен, однако, чтобы загрузить режим и тему. Когда я пытаюсь что-то вроде..

editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/javascript");

Запрос пытается найти файл в корне сети.

mysite.com/theme-monokai.js

Однако эти файлы должны быть скомпилированы с остальными и помещены в один большой уменьшенный файл.

Я предполагаю, что мне нужно включить тему и режим в мое определение, однако я пробовал это, и хотя я могу получить объект темы, такой как

define(['ace/mode-javascript'], function (mode_js) {
console.log('mode loaded just fine')
console.log(mode_js)
...

Однако мне не везет, когда я пытаюсь передать объект в функции setTheme и setMode.

editor.setTheme(ace_theme);
editor.getSession().setMode(mode_js);

Конечным результатом всего этого является то, что у меня работает туз редактор, но нет выделения или темы. Работает нумерация строк, работает табуляция. Я не уверен, что эти вещи находятся в главном ace.js или он успешно загружает свои зависимости и просто не может загрузить или не может сопоставить пути темы / режима с тем, как они загружаются.

Есть ли способ установить тему и режим по умолчанию с помощью конфига? это может помочь У кого-нибудь есть идеи, что мне не хватает?

Благодарю.

1 ответ

Структура папок / файлов для сборки ace.js была такой:

/ace/ace.js
/ace/mode-javascript.js
/ace/theme-textmate.js
etc
etc

Проблема в том, что ace ожидает магический путь ('ace/theme/textmate'). Мне нужно было получить правильную ссылку на файл (реальный файл) и иметь правильную ссылку на ace ('ace/theme/textmate') когда-то все было сведено и объединено в один файл.

Решение было

  1. Измените структуру имени папки / файла, чтобы имитировать то, что ожидалось. Поэтому я создал папку с именем mode в каталоге /ace. Я переименовал mode-javascript.js в javascript.js и поместил его в папку нового режима.

  2. Я добавил этот файл к вызову define() в моем проекте, чтобы его можно было добавить в объединенный файл.

    define (['ace /ace', 'ace / mode / javascript'], функция (ace, ace_mode) {....

  3. После этого я ничего не делаю с ace_mode, но мне нужно было, чтобы его увидели Requirjs, чтобы добавить его в объединенный файл.

  4. После этого я использую волшебную нить, как говорит туз

    editor.getSession() SetMode("Ас / Режим / JavaScript.");

Я сделал то же самое для тем. Пока это выглядит как работает. У меня есть темы, подсветка синтаксиса, свертывание кода и т. Д. И т. Д.

Еще одна вещь, чтобы упомянуть. Как я уже говорил, наш проект является пространством имен CXX и требует жизни в этом пространстве имен. Ace ищет require в окне или в собственном пространстве имен "ace", ни то, ни другое не было тем, что я хотел, поэтому я удалил код внизу файла ace, который пытается инициировать сам ace и назначить его глобальному var. Удалив это, мой вызов define может загрузить туза, как в основном правильный модуль AMD. в основном.

Другие вопросы по тегам