网站搜索

javascript - 未捕获的 TypeError: 类扩展的值 #<Object> 不是构造函数或为 null - 使用 superagent-throttle


我正在尝试在我的 TypeScript 项目中导入 npm 包 superagent-throttle,但当我这么做时,我收到以下信息:

Uncaught TypeError: Class extends value #<Object> is not a constructor or null

如果我使用 require,它就可以正常工作:

const Throttle = require("superagent-throttle");

但是,我已经开始使用 Vite,它不允许使用 require,所以我必须改用 import。

我引用它的代码想要实例化一个 类,例如:

        this.throttle = new Throttle({
            // set false to pause queue
            active: true,
            // how many requests can be sent every `ratePer`
            rate: 10000,
            // number of ms in which `rate` requests may be sent
            ratePer: 1000,
            // How many requests can be sent concurrently
            concurrent: 2
        });

我尝试了不同的 import 语句变体,但这些对我都不起作用:

import { Throttle } from "superagent-throttle";
import Throttle from "superagent-throttle";
import * as Throttle from "superagent-throttle";

它们都给出相同的结果——编译可以通过,但在运行时会失败,并显示相同的错误信息(如上所示)。

superagent-throttle JS 文件中的代码看起来相当晦涩,我根本不知道它想要做什么,所以我在努力尝试理解我该如何修复这个问题:

包文件:node_modules/superagent-throttle/dist/index.js:

'use strict';

var _events = require('events');

var _events2 = _interopRequireDefault(_events);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
...
class Throttle extends _events2.default {
  constructor(options) {
    super();
    // instance properties
    this._options({
      _requestTimes: [0],
      _current: 0,
      _buffer: [],
      _serials: {},
      _timeout: false
    });
... etc ...

答案#1

错误消息指向有问题代码中的 _events2.default:

var _events = require('events');

var _events2 = _interopRequireDefault(_events);
⋮                                👇 /* not a constructor or null */
class Throttle extends _events2.default {

调试器显示 _events.default 被模拟为空对象,这意味着 events 模块不可用。events(来自 Node)在浏览器中通常不可用,这导致了你观察到的错误。

一种解决方法是安装一个 events 垫片:

npm i -S events

演示