关于网页请求/sockjs-node/info?t=<当前时间戳>

当我们通过vue/cli5以下版本搭建Vue项目的时候,npm run serve启动项目之后,在network中会自动持续发送 /sockjs-node/info?t=<当前时间戳> 请求(vue/cli5是目前最新的版本,绝大多数项目都是在vue/cli5版本以下搭建的,通过vue/cli5搭建的项目没有该接口,应该有其他替换),那么这个请求有什么用呢?查了一番资料也算是搞懂了一些: 

① sockjs-node 是一个JavaScript库,提供跨浏览器JavaScript的API,创建了一个低延迟、全双工的浏览器和web服务器之间通信通道。在项目运行之后,会一直调用这个接口。

② SockJS是一个JavaScript库(用于浏览器),提供类似于WevSocket的对象。其作用就是开发环境下,保证我们在改完代码重新编译之后,能够通知浏览器重新加载变更结果。这里理解为这个库使用来让本地与浏览器之间的热模块更新通信的。

有时候也可能该接口会有报错现象:sockjs-node/info?t= net::ERR_CONNECTION_TIMED_OUT

前面说了SockJS库是让本地与浏览器之间的热模块更新通信的,如果两个地址对接不上了,可能就会报该错误。我们可以选择性的关闭该网页请求,那么怎么关闭呢?下面就来介绍下:

1. 首先找到node_modules/sockjs-client/dist/sockjs.js 

2.  找到代码的第1603行,将其注释掉

try {
  // self.xhr.send(payload);
} catch (e) {
  self.emit('finish', 0, '');
  self._cleanup(false);
}

上面就是核心,注释掉之后重新运行,网页确实不会再去调用sockjs-node/info 接口了,但是这样存在很大的问题,就是我们改的是自己本地的啊,换个人、或者重新远程拉下代码重新装下依赖,那就又得去重新改,每次都要去重新改,或者说换个人不知道改哪怎么办。所以说这样肯定是行不通的,现在解决方式就是:加个脚本,每当我们npm install 之后就自动替换改掉node_modules/sockjs-client/dist/sockjs.js该文件

1. 首先在根目录下新建 lib/sockjs-client/dist/sockjs.js;如图:

2. 然后把node_modules/sockjs-client/dist/sockjs.js下的js代码全部拷贝到我们新建的sockjs.js文件中,然后在我们的sockjs.js中的第1603行代码注释掉(就是准备将node_modules/sockjs-client/dist/sockjs.js文件替换成我们的文件)

3. 再在根目录下新建installSockJS.js脚本文件 

installSockJS.js 

const path = require('path')
const fs = require('fs')

const sockModulePath = path.join(__dirname, 'node_modules/sockjs-client/dist/sockjs.js')
const sockLibPath = path.join(__dirname, 'lib/sockjs-client/dist/sockjs.js')

fs.writeFileSync(sockModulePath, fs.readFileSync(sockLibPath))

4. 然后就是在package.json中的scripts中添加"postinstall": "node installSockJS.js" 脚本命令

"scripts": {
  "serve": "vue-cli-service serve",
  "build": "vue-cli-service build",
  "lint": "vue-cli-service lint",
  "postinstall": "node installSockJS.js"
},

5.  最后npm install或者cnpm install以下即可

但是这样有个弊端就是我们的热更新没有了。。就是修改代码,浏览器不会实时的加载变更结果。所以看大家吧 

还看到一些说是不采用上面的方案,通过在vue.config.js中 配置devServer: { host: 'localhost' } ,也可以到达效果并且保留热更新。但是我试了,并不起作用啊,还是一样的会调用sockjs-node/info接口,或许还有其他配置?。

大家知道也可能会有这个方案就好了,具体使用看大家。

今天就这么多,希望帮到有需要的煲仔们 

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...