【问题标题】:Writing WebSocket client with TypeScript running both on browser and Node.JS使用在浏览器和 Node.JS 上运行的 TypeScript 编写 WebSocket 客户端
【发布时间】:2018-07-11 07:06:16
【问题描述】:

我正在编写一个可以在网络浏览器中运行并使用 Node.JS 进行测试的打字稿代码。

我的客户端代码如下所示。

import * as WebSocket from 'ws';

export class SomeClient {
  constructor(url) {
    this.ws = new WebSocket(url);
  }
  
  send(data: any) {
    this.ws.send(data);
  }
}

我在使用 mocha/chai 编写单元测试代码时没有问题。

但是,在尝试捆绑此代码时,browserify 包含所有 'ws' 节点模块,并且输出文件的大小几乎为 100kb。如果我删除 import 'ws' 语句,捆绑文件大小会缩小到 1kb 以下。但是,在这种情况下,Node.JS 测试会报错“未定义 WebSocket”。

我认为,这是因为 WebSocket 在 Web 浏览器中本机支持,但在 Node.JS 中不支持,并且需要外部“ws”模块才能正常运行。

我怎样才能制作一个最小尺寸的 web 浏览器但可以在 Node.JS 中使用的包???

【问题讨论】:

标签: node.js typescript webpack websocket browserify


【解决方案1】:

试试isomorphic-ws:

npm i isomorphic-ws -s

或universal-websocket-client:

npm install --save universal-websocket-client

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我能找到的最佳解决方案是使用 isomorphic-ws 在我的打字稿 rootDir 中创建一个 decs.d.ts 并包含以下内容

    declare module "isomorphic-ws";
    

    然后像这样在打字稿中使用它:

    import { IsoWebSocket } from "isomorphic-ws";
    var ws = new IsoWebSocket("wss://echo.websocket.org") as WebSocket;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-19
      • 2016-06-10
      • 2011-04-20
      • 2015-10-21
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      相关资源
      最近更新 更多