jQuery flot 图表使用 webpack 生成"Uncaught TypeError: e.setTimeout is not a function"



当我通过webpack包含jquery.flot.resize.js时,会生成"Uncatch TypeError: e.setTimeout 不是一个函数"。

这是我的代码。

import "jquery.flot/jquery.flot.js";
import "jquery.flot/jquery.flot.resize.js";

这使得浏览器控制台中的类型错误像这样。

Uncaught TypeError: e.setTimeout is not a function

如果它加载带有标签的相同 javascript,它运行良好。 该错误仅发生在 webpack 上。

就我而言,以下语法解决了这个问题:

import * as [some-name] from '[reference to your file or directory]';

该错误是由"jquery.flot.resize.js"中的假设引起的,该假设this包含window,这在使用 webpack 编译时不成立。有问题的代码不是源代码本身,而是在复制和粘贴的依赖项(jQuery resize 事件(中。

这个问题似乎已经在 2019 年 10 月得到解决,当时他们粘贴了不同版本的依赖项。此更改在 flot 4.2.0 中发布。

如果您需要使用早期版本的 flot,可以使用 webpack imports-loader 解决问题,例如(将 imports-loader 添加到应用程序 (dev( 依赖项(:

// ./webpack.config.js
module.exports = {
...
module: {
rules: [
{
test: require.resolve("jquery.flot/jquery.flot.resize.js"),
use: "imports-loader?this=>window"
}
]
}
};

找到了解决方案,显然它比看起来更简单,因为他们发送到以零数据调用的图形以某种方式失败,因此如果没有数据,则无需绘制图表他们每个月仍然为零,然后验证是否有数据可绘制 将消息类型"没有数据"而不是将图形绘制为零 它有效给我的。

没有数据 ?(无结果( : (图表(

最新更新