vite.config.js配置-解决跨域问题,以及@vitejs/plugin-vue等报错

本文记录了一位开发者在配置Vite开发环境和解决项目运行时跨域问题的过程中遇到的挑战,包括Vite版本兼容、错误处理以及官方文档的重要性。在生产环境中,提到了公共路径配置和IIS服务器上的跨域解决方案。
摘要由CSDN通过智能技术生成

开发环境

在配置的过程中踩了很多坑,还是太菜,有些东西弄不明白什么意思。

运行项目时的报错可直接到最下面看vite.config.js文件的注释

目前项目用到的模块并不多,package.json文件如下

{
  "name": "PsWebV3Abb",
  "version": "0.0.0",
  "scripts": {
    "dev": "vite",
    "build": "vite build"
  },
  "dependencies": {
    "@vitejs/plugin-vue": "^1.0.0",
    "axios": "^1.2.1",
    "element-plus": "^2.2.26",
    "vite": "^4.0.3",
    "vue": "^3.0.4",
    "vue-router": "^4.1.5"
  },
  "devDependencies": {
    "@vue/compiler-sfc": "^3.0.4"
  }
}

其实主要还是这些模块的版本兼容问题

vite的版本最开始是1.0.0,后面很多地方搞不下去了才卸载了重装新的版本

当然还是建议仔细阅读一下官方文档,其实很多重要的点都讲的很清楚,只不过是遇到问题的时候才会注意到。官方文档请移步这里

下面简单的说一下这个文件,

首先是文件的位置,放在其他位置是无效的:

        

运行vite项目的时候,就会自动解析根目录下面的这个文件

我这里的主要目的还是解决项目运行时的跨域问题

下面是封装的一个简单的请求示例,其中service是一个封装好的axios实例,可以指定一下baseurl,以及请求和响应拦截。

其他的API都可以像这样通过给getItem添加方法的方式实现

import service from '../utils/requests.js'

const getItem = {}

getItem.getppitem = function (params) {
  return service.get('api/AutoSimple/getdata', params)
}

export default getItem

vite.config.js 具体的配置如下

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// import eslintPlugin from 'vite-plugin-eslint'
// https://vitejs.dev/config/

// 这个配置文件可能出现的问题:
// 首先是此文件放置的位置
// 1.未安装 @vitejs/plugin-vue
// 处理方法:npm i @vitejs/plugin-vue@1.0.0
// 由于本项目vite版本1.0限制,只能用了plugin-vue的1.0.0版本,但在运行的时候又导致了问题2,
// 于是直接卸载vite重新安装最新的3.0.4,这个版本直接install plugin-vue仍然不行,还是要用1.0.0版本
// 2.显示不存在函数 defineConfig
// 在此之后npm run dev,又报了一个错:Cannot find module 'node:path'
// 在掘金上看到是和node版本有关,更新后就可以正常运行了

export default defineConfig({
  plugins: [
    vue()
    // 检查代码格式
    // eslintPlugin({
    //   include: ['src/**/*.js', 'src/**/*.vue', 'src/*.js', 'src/*.vue']
    // })
  ],
  server: {
    // 默认打开的端口和本地
    // host: '0.0.0.0',
    port: 3000,
    https: false, // 不支持https
    proxy: {
      '/api': {
        target: 'http://10.200.20.80/BARCODESERVICE',	// 实际请求地址
        changeOrigin: true, // 是否跨域
        rewrite: (path) => path.replace(/^\/api/, '') // 对什么类的服务器匹配
      },
    }
  }
})

生产环境

在部署生产环境时,又遇到了两个问题:

1.公共路径的问题

客户环境是IIS服务器,为了节省端口,在部署的时候选择在同一个网站下添加多个应用程序的方式,这就使得在部署时,需要添加公共的基础路径,这一点在官方文档中有详细的说明。

 

解决方案:

在package.json中配置

"scripts": {
    "dev": "vite",
    "build": "vite build --base=/PsWebDand/ "
  }

2.跨域无效的问题

vite.config.js 中的server的proxy无效,此时跨域的问题需要通过在后端服务中配置来解决

IIS服务器

<httpProtocol>
      <customHeaders>
                <add name="Access-Control-Allow-Headers    " value="Content-Type,api_key,Authorization" />
                <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
                <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
</httpProtocol>

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Vite中,可以通过`vite.config.js`文件进行配置,实现跨域请求。具体实现如下: 1. 在`vite.config.js`中配置`server.proxy`,指定需要代理的接口地址和目标地址: ```javascript export default { server: { proxy: { '/api': { target: 'http://api.example.com', changeOrigin: true, rewrite: path => path.replace(/^\/api/, '') } } } } ``` 上述配置表示当本地请求地址以`/api`开头时,Vite会自动将请求代理到`http://api.example.com`地址,并且将`/api`前缀替换为空字符串,以便后端服务能够正确接收请求。 2. 在前端代码中发起请求时,将请求地址改为代理地址即可。例如: ```javascript fetch('/api/getData') ``` 上述代码实际上会被代理成: ```javascript fetch('http://api.example.com/getData') ``` 这样就可以实现跨域请求了。需要注意的是,在开发环境下使用代理可能会影响调试,因此建议在生产环境中使用真实的接口地址。 ### 回答2: 跨域是在前后端分离开发时,由于浏览器的同源策略限制,导致无法在前端代码中直接访问不同域名下的资源或接口。为解决跨域问题,需要在前端代码中进行一些配置。 在使用 Vite 构建工具时,针对跨域问题,可以在项目中添加一个名为 vite.config.js配置文件。vite.config.js 是一个配置文件,在其中可以设置跨域相关的配置。 下面介绍几种常见的跨域配置方法: 1. proxy 代理配置 proxy 代理配置是通过指定代理地址,在服务器端转发请求来解决跨域问题。在配置时,需要指定一个 target 参数指向接口的域名。如下: ```js module.exports = { proxy: { // 代理接口地址 '/api': { // 目标 API 地址 target: 'http://example.com', changeOrigin: true, rewrite: path => path.replace(/^\/api/, '') } } }; ``` 2. cors 配置 CORS 是一种浏览器机制,允许服务器告诉浏览器哪些跨域请求被允许。在实现跨域时,可以在服务器端设置 Access-Control-Allow-Origin 头部解决。在 Vite 中,可以通过设置 cors 属性来实现跨域。如下: ```js import express from 'express'; export default { server: { middlewareMode: true, app: express().use((_, res) => { // 设置 Access-Control-Allow-Origin 头部 res.setHeader('Access-Control-Allow-Origin', '*'); res.end('Hello World!'); }) } }; ``` 3. jsonp 配置 Jsonp 是一种利用 script 标签的 src 属性来实现跨域的技术。在 Vite 中,可以在配置文件中使用 vite-plugin-jsonp 插件来实现 jsonp。如下: ```js // 安装 vite-plugin-jsonp 插件 npm i vite-plugin-jsonp --save-dev // 引入插件 import jsonp from 'vite-plugin-jsonp'; export default { plugins: [jsonp()] }; ``` 以上为几种常见的 Vite 跨域配置方法,需要根据项目实际需求选择合适的方法。在项目中使用适当的跨域配置方法,可以避免许多跨域问题出现,在保证接口正确性的同时提高项目开发的效率和灵活性。 ### 回答3: vite.config.jsVite项目的配置文件,它提供了一些选项来定制化项目的构建和运行。其中,跨域配置是非常重要的一个选项,它能够帮助我们解决前端开发中经常遇到的跨域问题,使得我们能够更加方便地进行开发和调试工作。 在Vite项目中,我们可以通过在vite.config.js文件中设置proxy选项来配置跨域。proxy选项是一个对象,其中包含了一系列跨域配置信息。 例如,我们可以设置一个名为api的代理,将请求转发到https://example.com/api这个地址上: ```javascript module.exports = { proxy: { '/api': { target: 'https://example.com/api', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') } } } ``` 上述配置中,我们使用了正则表达式来匹配请求路径,将所有以/api开头的请求都转发到https://example.com/api这个地址上。同时,我们还设置了changeOrigin和rewrite选项,分别用于指定是否修改请求头中的Origin字段和重写请求路径。 除了设置代理之外,我们还可以通过设置cors选项来配置跨域。cors选项的值可以是一个布尔值或者一个对象,用于指定cors的相关参数。 例如,我们可以通过设置cors选项来允许所有的跨域请求: ```javascript module.exports = { cors: true } ``` 上述配置中,我们将cors选项设置为true,表示允许所有跨域请求。如果我们想要更加细致地配置cors,可以使用一个对象来指定相关参数。 总之,Vite提供了非常灵活、方便的配置方式来解决跨域问题,使得我们能够更加高效地开发和调试前端应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值