我想在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 对象'
抱歉,问题是建筑不正确 我使用了 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'),
}
}
})
}