vue3 vite 跨域问题搞死人

vite.config.js

  server: {
    host: '0.0.0.0',
    // port: 80,
    proxy: {
      '/api': {
        target: 'https://xxx.com', //目标url
        changeOrigin: true, //支持跨域
        rewrite: (path) => path.replace(/^\/api/, ''),
        //重写路径,替换/api
        // ws:true,
      },
    },
  },

最近被vue3的跨越问题搞死人,部署到服务器,服务器配置文件:

## 后台接口
  location /api {
    proxy_pass https://xxx.com;
  }

关键是这个东东不能复现,有时候运行正常,有时候又不行,真是搞死人了。绝大部分时候运行不了。不知道是什么原因。

后来想,实在没办法,把vue上传用npm run dev吧,可是echats图加载,element-plus加载又是搞死人,一个echats有19兆,element-plus有17兆,页面要加载40秒!!
echats按需加载:

import * as echarts from '../../../node_modules/echarts/lib/echarts';

import '../../../node_modules/echarts/lib/component/title';
import '../../../node_modules/echarts/lib/component/legend';
import '../../../node_modules/echarts/lib/component/radar';
import '../../../node_modules/echarts/lib/chart/radar';

elment-plus:

// vite.comfig.js
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';

// plugins: []
    // 自动加载ui模块
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),

echarts是解决了,但在npm run dev模式下elment-plus永远是要加载17m大小的文件。后来想一想,build里的dist是需要Nginx服务器来进行代理进行跨域,npm run dev是node进行解决跨越,那npm run preview不是也可以使用node来解决跨域吗?

赶紧上传,npm run preview,kao,解决了!!!

// package.json
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview --port 80"
  },

npm run preview 叫预览,明明是 production嘛,node模式下的生产模式啊。

这样再也不用烦恼跨越问题了……


在 @star7th 的提醒下,又再次看看Nginx和vite代理的差异,发现vite的proxy是替换,而Nginx则没有。

  location /api {
    rewrite ^/api/(.*) /$1 break;
    proxy_pass https://xxx.com;
  }

所以要把api这个自定义的路由前缀给屏蔽掉。之前部署的时候,在代码里把api给替换了,这次忘记了。本地测试的时候地址是 xxx/api/api/xxx,正常读取数据,部署的时候还以为也需要这样,部署的时候要把去掉一个api。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 4

你应该多去了解nginx知识,或者问下AI怎么写。 生产环境,使用dev模式的话,文件大,性能差,承受的用户量急剧下降。

11个月前 评论

nginx 配置个转发的问题,不需要绕那么大弯。 我预感大概率问题出现在你的反向代理配置没处理一些header之类的 试试用这个


server {
    listen       80;
    server_name  test.showdoc.com.cn;
    client_max_body_size 1000m;
    location ^~ / {
        proxy_pass http://127.0.0.1:4999/;
        proxy_redirect off;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header http_user_agent $http_user_agent;
    }
}
11个月前 评论
andu (楼主) 11个月前

配置proxy不是在本地开发的时候才用的吗,上线就配置BASE_URL就行了

10个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!