Я в процессе обновления моего приложения с Rails 5.2 до Rails 6.0, а также пытаюсь перенести некоторые вещи в webpacker, включая crossfilter
(который теперь crossfilter2
) и reductio
, и потратив несколько часов, я уже не собираюсь выяснять, как устранить следующую ошибку:
В reductio's value-count.js
верхняя строка равна var crossfilter = require('crossfilter2');
, а внутри самого кода она вызывает crossfilter.bisect.by(function...
. Когда я пытаюсь отобразить свои dc
диаграммы (которые работали до перехода в веб-пакет), моя консоль разработчика Chrome показывает:
Uncaught TypeError: Cannot read property 'by' of undefined at value-count.js:38
Это было вызвано возвращением crossfilter.bisect
undefined
, Поэтому я вырыл немного глубже. В моем собственном коде, который вызывает crossfilter
(шаблон JS, который вызывается через AJAX), console.log
показал, что crossfilter
- это функция, как и ожидалось.
Когда я изменил reductio
s value-count.js
и добавленный оператор console.log
внутри обратного вызова initial
, он показал crossfilter
как модуль, с атрибутом default
, содержащим функцию crossfilter
.
Когда я удалил var crossfilter = require('crossfilter2');
из value-count.js
, код моего приложения снова заработал, предположительно потому, что я определил crossfilter
в своем application.js.erb
(см. Ниже), который импортировал его как функцию. Таким образом, это выглядит как несоответствие внутри самого кода reductio
, но, поскольку я новичок в веб-пакете, я чувствую, что я могу что-то упустить в операторах import
.
Вопрос: Как я могу получить reductio
чтобы использовать мою глобальную ссылку на crossfilter
без изменения reductio
исходных файлов?
Моя среда:
ruby: 2.6.5
Rails: 6.0.2.1
crossfilter2: 1.5.2
reductio: 0.6.3
Вот соответствующий код в моем app/javascript/packs/application.js.erb
(Мне понадобилось несколько часов, чтобы понять это):
import crossfilter from 'crossfilter2';
window.crossfilter = crossfilter;
import reductio from 'reductio';
window.reductio = reductio;
Я был бы очень признателен, если бы кто-нибудь сказал мне, что я скучаю.