如何在Rails 6中使用webpacker使Reduce与crossfilter2一起工作
我正在将我的应用程序从Rails 5.2升级到Rails 6.0,并尝试将一些东西迁移到webpacker,包括如何在Rails 6中使用webpacker使Reduce与crossfilter2一起工作,webpack,crossfilter,reductio,Webpack,Crossfilter,Reductio,我正在将我的应用程序从Rails 5.2升级到Rails 6.0,并尝试将一些东西迁移到webpacker,包括crossfilter(现在是crossfilter2)和ReduceTio,在花了几个小时之后,我还没有找到解决以下错误的方法 在ReduceTio的value count.js中,顶行是var crossfilter=require('crossfilter2'),并且在代码本身中,它调用crossfilter.bisect.by(函数…)。当我尝试呈现dc图表(在转到webpac
crossfilter
(现在是crossfilter2
)和ReduceTio
,在花了几个小时之后,我还没有找到解决以下错误的方法
在ReduceTio的value count.js
中,顶行是var crossfilter=require('crossfilter2')代码>,并且在代码本身中,它调用crossfilter.bisect.by(函数…
)。当我尝试呈现dc
图表(在转到webpack之前工作)时,我的Chrome开发者控制台显示:
Uncaught TypeError: Cannot read property 'by' of undefined at value-count.js:38
这是由crossfilter.bisect
返回undefined
引起的。所以我挖了更深一点。在我自己调用crossfilter
(通过AJAX调用的JS模板)的代码中,console.log
显示crossfilter
是一个函数,这是预期的
当我修改reducetio
的value count.js
并在初始
回调中添加console.log
语句时,它将crossfilter
显示为一个模块,带有一个default
属性,其中包含函数crossfilter
当我从value count.js
中删除var crossfilter=require('crossfilter2');
时,我的应用程序代码再次工作,可能是因为我在application.js.erb
中定义了crossfilter
(见下文),它将其作为函数导入。因此,在reduceTio
代码本身中似乎存在不一致之处,但由于我是webpack新手,我觉得在import
语句中可能缺少一些内容
问题:如何使reducetio
在不修改reducetio
源文件的情况下使用对crossfilter
的全局引用?
我的环境:
ruby: 2.6.5
Rails: 6.0.2.1
crossfilter2: 1.5.2
reductio: 0.6.3
下面是我的app/javascript/packs/application.js.erb
中的相关代码(我花了几个小时才弄明白):
如果有人能告诉我我错过了什么,我将不胜感激。你能回到crossfilter2@1.4?我认为这可能类似于,不是在细节上,而是在作为函数的交叉过滤器和作为模块的交叉过滤器之间的模糊性。具体来说,一些构建系统不喜欢同时也是函数的模块,这是e路交叉过滤器总是被定义的。嗨,谢谢@gordon让我知道这个问题!ReduceTio目前在模块方面的工作方式我并不满意。幸运的是,我们即将合并一个使用ES6模块的拉请求和一个更标准的构建和模块公开方法。它仍然会公开一个全局和消费交叉过滤器全局,但我希望它能更好地与构建系统一起工作。你愿意尝试拉请求,看看它是否对你更有效吗?嗨@Gordon,我尝试降级到crossfilter2@1.4(已安装1.4.8),但问题仍然存在。@Ethan,你的答案行得通!你能回去吗crossfilter2@1.4?我认为这可能类似于,不是在细节上,而是在作为函数的crossfilter和作为模块的crossfilter之间的模糊性。具体地说,一些构建系统不喜欢作为函数的模块,这是crossfilt的方式er总是被定义的。嗨,谢谢@gordon让我知道这个问题!ReduceTio目前在模块方面的工作方式我并不满意。幸运的是,我们即将合并一个使用ES6模块的拉请求和一个更标准的构建和模块公开方法。它仍然会公开一个全局和全局的使用交叉过滤全局,但我希望它在构建系统中更有效。您是否愿意尝试拉取请求,看看这是否对您更有效?嗨@Gordon,我尝试降级到crossfilter2@1.4(它安装了1.4.8),但问题仍然存在。@Ethan,你的答案有效!
import crossfilter from 'crossfilter2';
window.crossfilter = crossfilter;
import reductio from 'reductio';
window.reductio = reductio;