Colyseus.js class 构造函数无法在没有 'new' 的情况下被调用,尽管目标:"es6"

Colyseus.js class constructor cannot be invoked without 'new' despite target: "es6"

我有一个 TypeScript 浏览器游戏设置,它使用 Colyseus.js 作为多人游戏框架,并使用 webpack 5 和 ts-loader 进行捆绑。

当我 运行 代码时,我收到此错误消息:

Uncaught (in promise) Error: Class constructor Room cannot be invoked without 'new'
    at new MatchMakeError (colyseus.js:4752)
    at Client.<anonymous> (colyseus.js:4888)
    at step (colyseus.js:90)
    at Object.next (colyseus.js:71)
    at fulfilled (colyseus.js:61)

我已经阅读了很多关于如何通过将 TypeScript 编译为 ES6 来解决这个问题的帖子。然而,我的 tsconfig.json 已经看起来像这样:

{
  "compilerOptions": {
    "target": "es6",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "skipLibCheck": true
  }
}

我使用的 webpack:

resolve: {
  extensions: [".ts", ".html", ".css"],
},

module: {
  rules: [
    {
      test: /\.ts?$/,
      use: [
        {
          loader: "ts-loader",
          options: {
            transpileOnly: true,
          },
        },
      ],
    },
  ]
}

现在我在 webpack 输出中看到它正在使用这个:

../../node_modules/colyseus.js/dist/colyseus.js 213 KiB [built] [code generated]

我的猜测是,Colyseus.js 被编译为目标 ES5 并使用了 var _this = _super.call(this, message) || this; hack。然后我将我的代码编译为 ES6 并复制 Colyseus.js 代码,这些代码总的来说是不兼容的。

我该如何解决这个问题?我已经尝试将我的 tsconfig 中的目标设置为 es5,没有太大区别。其他人如何使用 webpack Colyseus.js?

刚弄明白:实际上这是服务器端代码(我在 node.js 中有)的响应,直到现在才编译为 es5。客户端/浏览器正在生成此日志,因为 Colyseus 的工作方式是将请求发送到后端,并在出现异常时将其作为结果传递给客户端。