Rails: доступ к методам модуля JS из файлов, обслуживаемых веб-упаковщиком
контекст
Я пытаюсь переместить ресурсы из нашего приложения в веб-пакет, используя гем Webpacker. Приложение очень большое, поэтому мне нужно сделать это частично.
Что до сих пор...
Мне удалось вызвать скрипт, используя javascript_pack_tag
Я экспортирую супер простой модуль:
# javascript/src/javascript/test.js'
const Direction = {
log_to_console: function(){
console.log('test');
}
};
export default Direction;
Затем импортируйте его в точку входа приложения
# javascript/packs/application.js
import Test from '../src/javascript/test.js'
Test.log_to_console();
Наконец рендеринг в макете:
# app/views/application.slim
= javascript_include_tag 'application'
Результат: строка "Test" отображается в консоли браузера.
Эта проблема
В настоящее время во всем приложении мы используем Модули в таких представлениях:
# app/views/assets/javascripts/test.coffee
log_to_console = ->
console.log('test');
@Test = { log_to_console }
# app/views/some/template.slim
javascript:
Test.log_to_console()
Но после перемещения модуля в веб-пакет я не могу получить доступ к Test
модуль больше.
Итак, мой вопрос:
Как настроить webpacker
gem ИЛИ рефакторинг кода выше, чтобы сделать log_to_console()
метод, доступный в представлениях / браузере?
В идеале было бы, если бы мы могли также получить к ним доступ в старых файлах javascript, скомпилированных с помощью звездочек.
1 ответ
Я выяснил это решение на данный момент. Может быть полезным для всех, кто сталкивается с этой проблемой.
Если кто-нибудь найдет лучшее решение, я был бы рад увидеть его здесь;).
На данный момент все наши модули / библиотеки, которые должны быть видны в представлениях / других кофейных файлах, я просто установил как глобально доступный через window
объект.
import Foo from '../src/javascript/foo.js
window.Foo = Foo
Я знаю, что это уродливый анти-паттерн, но он работает как временное решение, пока мы не обновим наши скрипты, ведущие себя как независимые пакеты.