node.js 中的 Socket.io 客户端

问题描述 投票:0回答:1

我想在node js项目中使用socket.io-client cdn

有时我会使用不同的套接字 io 版本连接到不同的套接字服务器。所以我需要使用套接字 io 客户端 cdns 来处理它,具体取决于我需要使用什么版本

但是问题是socket.io-client在node js环境下无法正常工作

当我尝试进行连接时,出现超时错误,就是这样

这是我需要使用的 CDN 的示例 https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.7/socket.io.min.js

有人遇到过这个问题吗?我应该直接在 cdn 中添加任何内容才能使其正常工作吗?

这就是我已经尝试过的。我创建了一个文件,然后从中导入

/* eslint-disable */
import ws from 'ws'
export default function () {
    // Fix for react-native
    if (typeof window !== 'undefined') {
        if (typeof window.navigator === 'undefined' || typeof window.navigator.userAgent === 'undefined') {
            window.navigator.userAgent = 'react-native'
        }
    }
    typeof self == 'undefined'
    && typeof global == 'object'
    && (global.self = global);

    if (typeof self.WebSocket === 'undefined') {
        self.WebSocket = ws
    }

    if (typeof self.navigator === 'undefined') {
        self.navigator = { userAgent: 'node' }
    }

    var t;
    return function e(t, n, r) { // cdn build...

这就是我导入的方式

import io from './versions/v1_3_7.js'

const socket = io()(`${url}`, {...})

我预计它会起作用,但现在我尝试在 node.js 中运行它时遇到此错误

'错误:ws 在浏览器中不起作用。浏览器客户端必须使用本机 WebSocket 对象'

node.js version-control cdn connection-timeout socket.io-client
1个回答
0
投票

抱歉,问题是建筑不正确 我使用了 vite,它默认设置一个全局对象“窗口” 然后当我测试我的应用程序时,它认为它是一个浏览器,因为 vite...

这是我用的cdn

/* eslint-disable */
import ws from 'ws'

export default function () {
    // Fix for react-native
    if (typeof window !== 'undefined') {
        if (typeof window.navigator === 'undefined' || typeof window.navigator.userAgent === 'undefined') {
            window.navigator.userAgent = 'react-native'
        }
    }

    // Fix for node.js usage
    if (typeof self === 'undefined' && typeof global === 'object') {
        global.self = global

        global.WebSocket = ws

        if (typeof self.navigator === 'undefined') {
            self.navigator = { userAgent: 'node' }
        }
    }

    var t;
    return function e(t, n, r) {

这是一个在外部数组中指定了“ws”包的 vite 配置(以避免也出现 ws 的问题)

import { resolve } from 'path'
import { defineConfig, loadEnv, ConfigEnv } from 'vite'
import dts from 'vite-plugin-dts'

export default ({ mode }: ConfigEnv) => {
    process.env = {
        ...process.env,
        ...loadEnv(mode, process.cwd(), '')
    }

    return defineConfig({
        build: {
            rollupOptions: {
                external: [ 'ws' ],
                output: {
                    exports: 'named'
                }
            },
            outDir: 'dist',
            sourcemap: true,
            commonjsOptions: {
                esmExternals: true
            },
            lib: {
                entry: resolve(__dirname, 'src/index.ts'),
                formats: [ 'es', 'cjs', 'umd', 'iife' ],
                name: 'app',
                fileName: (format) => {
                    return `app.${format}.js`
                },
            }
        },
        plugins: [
            dts({
                copyDtsFiles: true,
                rollupTypes: true
            })
        ],
        resolve: {
            alias: {
                '@': resolve(__dirname, './src'),
                app: resolve(__dirname, './src'),
            }
        }
    })
}

© www.soinside.com 2019 - 2024. All rights reserved.