jQuery 浮点图表使用 webpack 生成“Uncaught TypeError: e.setTimeout is not a function”

Posted

技术标签:

【中文标题】jQuery 浮点图表使用 webpack 生成“Uncaught TypeError: e.setTimeout is not a function”【英文标题】:jQuery flot charts generate "Uncaught TypeError: e.setTimeout is not a function" with webpack 【发布时间】:2019-02-25 10:13:45 【问题描述】:

当我通过 webpack 包含 jquery.flot.resize.js 时,会生成“Uncaught TypeError: e.setTimeout is not a function”。

这是我的代码。

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

这样会在浏览器控制台中出现类型错误。

Uncaught TypeError: e.setTimeout is not a function

如果它使用标签加载相同的 javascript,它工作得很好。 该错误仅发生在 webpack 上。

【问题讨论】:

你能重现fiddle中的错误吗? 【参考方案1】:

在我的例子中,以下语法解决了这个问题:

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

【讨论】:

【参考方案2】:

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

The problem seems to have been solved in October 2019 当他们粘贴不同版本的依赖项时。此更改已在 flot 4.2.0 中发布。

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

// ./webpack.config.js

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于jQuery 浮点图表使用 webpack 生成“Uncaught TypeError: e.setTimeout is not a function”的主要内容,如果未能解决你的问题,请参考以下文章

使用可视化图表对 Webpack 2 的编译与打包进行统计分析

vue-cli webpack 引入jquery

Vue.js - 通过 Webpack 注册图表组件

Vue中引入jquery方法 vue-cli webpack 引入jquery

webpack用法总结---性能优化

dll