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

Я знаю, что это уродливый анти-паттерн, но он работает как временное решение, пока мы не обновим наши скрипты, ведущие себя как независимые пакеты.

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