首页 > 解决方案 > jQuery 浮点图表使用 webpack 生成“Uncaught TypeError: e.setTimeout is not a function”

问题描述

当我通过 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 上。

标签: javascriptjquerywebpackflot

解决方案


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

当他们粘贴不同版本的依赖项时,问题似乎已经在 2019 年 10 月得到解决。此更改已在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"
            }
        ]
    }
};

推荐阅读