解决webpack项目启动后报错:Access to XMLHttpRequest at ‘http://xxx:xxx/sockjs-node/info?t=xxx‘ from origin...

报错:

Access to XMLHttpRequest at 'http://xxx:xxx/sockjs-node/info?t=xxx' from origin 'http://xxx:xxx' has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space `private`.

原因:

首先说一下,webpack默认会启用热更新,调用sockjs,作用是保证我们在改完代码重新编译之后,能够通知浏览器重新加载变更结果,不需要手动刷新。

出现上面的错误可能是devServer被nginx或其他代理服务器代理,浏览器访问的是代理服务器地址,如example.com,而热更新脚本sockjs猜测要连接的地址是devServer的本地网络地址,如192.168.16.100,从而出现跨域问题。

解决方法:

在webpack的配置文件中devServer加上如下配置:

module.exports = {
  //...
  devServer: {
    public: 'example.com:80'
  }
};

example.com换成代理服务器的ip或域名。如果是uniapp项目,在manifest.json中配置。

以下是webpack官网的解释:

翻译:当使用内联模式并且代理开发服务器时,内联客户端脚本并不总是知道连接到哪里。它会尝试根据window.location猜测服务器的URL,但是如果失败了,你就需要使用这个。 例如,dev-server由nginx代理,在myapp上可用。

如果需要关闭热更新,作如下配置:

module.exports = {
  //...
  devServer: {
    inline: false
  }
};

但是修改代码后需要手动刷新页面。

网上大部分解决方案是修改sockjs源码,属于治标不治本,而且会使热更新失效

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值