node.js - 使用同时在浏览器和 Node.JS 上运行的 TypeScript 编写 WebSocket 客户端

标签 node.js typescript webpack websocket browserify

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

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

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” Node 模块,输出文件的大小几乎为 100kb。如果我删除 import 'ws' 语句,包文件大小会缩小到不到 1kb。但是,在这种情况下,Node.JS 测试会提示“WebSocket 未定义”错误。

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

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

最佳答案

尝试 isomorphic-ws :

npm i isomorphic-ws -s

universal-websocket-client :

npm install --save universal-websocket-client

关于node.js - 使用同时在浏览器和 Node.JS 上运行的 TypeScript 编写 WebSocket 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48554582/

相关文章:

typescript - 如何约束对象的键但将值推断为 const?

javascript - 数据透视表过滤 Office 脚本

javascript - 是否可以在 promise 中简化 promise 解决?

javascript - 用对象数组中的值替换对象中的键

javascript - 使用 puppeteer 来使用 CSS @media 规则

node.js - 将 nodejs 应用程序部署到谷歌云平台

url - Angular 2 - 如何从 canactivate guard 中的 url 导航

html - Webpack 样式!css!sass 加载器

javascript - 如何在 React JS + Typescript 应用程序中读取本地 JSON 文件并访问数据?

node.js - 如何使用从 Controller 返回的值?在 NestJs 上测试 Controller