Как получить приведение к работе с crossfilter2 с помощью веб-упаковщика в Rails 6 - PullRequest
1 голос
/ 29 января 2020

Я в процессе обновления моего приложения с 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;

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

...