20191119_VUE打包后代理失效的问题

VUE打包后代理失效的问题

当vue对接的接口没有开启可跨域的模式的情况下,我们需要开启代理,但是不同环境的代理是不一样的。

开发环境

在开发环境下,我们需要在vue.config.js中配置代理。

devServer:{
    proxy: {
      '/api': {
        target: '',
        changeOrigin: true,
        ws: true,
        pathRewrite: {
          '^/api': 'http://xxx.com/api'
        }
      }
    }
  }

调用接口的时候以api开头,就会自动代理到http://xxx.com/api

生产环境

但是当你打包之后,你会发现出了点问题,接口请求是404。

打包到phpstudy运行

npm run build之后生成dist文件夹,然后将文件夹丢到phpstudy的www文件夹下面,运行phpstudy,访问localhost:8080/dist文件夹即可。

(这里我的端口号是81,所以我访问的是http://localhost:81/dist/#/index)

解决打包后代理失效的问题

当你打开页面之后会发现,所有的接口请求是404,百度之后告知,打包之后的代理是不生效的,我们需要在vue中修改,将api开头的接口修改为``http://xxx.com/api`开头。

=避免被打的分界线=

如果上面这句话你看着很坑爹,你可以这么干,在vue项目下面新增两个文件.env.dev.env.production

// .env.dev
NODE_ENV='dev'         
// .env.production
NODE_ENV='prod'  

修改package.json

"scripts": {
    "serve": "vue-cli-service serve --mode dev",
    "build": "vue-cli-service build --mode production"
  },

然后在你的全局配置base_url那里使用下面的方法

if (process.env.NODE_ENV === "'dev'"){
      base_url = 'api'
} else {
     base_url = 'http://xxx.com/api`'
}

=分界线结束=

确保你的phpstudy是用的nginx(选择切换版本,查看是否是用的nginx,我原先用的apache,然后就傻了…)

然后打开 其它选项=》打开配置文件=》nginx-conf,在里面的server增加这么一句话:

location /admin {
      proxy_pass http://xxx.com/;   // 记得加斜杠啊
}

由于不支持api开头做代理,我们要将生产环境下的base_url修改为

if (process.env.NODE_ENV === "'dev'"){
      base_url = 'api'
} else {
     base_url = 'http://xxx.com/admin/api'
}

最后附上一句我还没怎么消化完的话
ngnix配置文件中加不加斜杠的区别

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Vue3打包代理失效是因为打包后的代码被压缩、混淆了,导致无法正确识别和处理代理设置。 要解决这个问题,可以尝试以下几种方法: 1. 在webpack配置中添加devServer的proxy配置。在vue.config.js(或是webpack.config.js)中,找到devServer配置,添加类似如下的代码: ```javascript devServer: { proxy: { '/api': { target: 'http://localhost:3000', changeOrigin: true, pathRewrite: { '^/api': '' } } } } ``` 这样就会将以'/api'开头的请求代理到目标服务器,解决了打包代理失效问题。 2. 使用vue.config.js文件自定义打包配置。在vue.config.js中添加configureWebpack配置,对打包后的代码进行特殊处理,使其能够正确处理代理设置。例如: ```javascript module.exports = { configureWebpack: config => { if (process.env.NODE_ENV === 'production') { // 生产环境下修改打包后的代码 // 对于axios或fetch等库,可以在这里进行替换,在发送请求时自定义代理请求头等 // config.externals中加入需要替换的库名 // 对于Proxy等语法,可以在这里进行处理 // config.optimization.minimizer中加入需要解析的代理关键词 // 对于其他特殊处理的代码,也可以在这里进行修改 // config.module.rules中加入需要处理的loader } } } ``` 使用该方法可以根据自己的需要来定制打包后的代码,确保代理功能正常。 3. 手动处理打包后的代码。将打包后的代码进行手动修正,找到和代理相关的代码逻辑,根据具体情况进行修改。这种方法需要对打包后的代码有一定的了解,并且需要注意维护的难度较大。 无论采用哪种方法,解决Vue3打包代理失效问题都需要在打包配置中进行相应的处理,确保代理功能可以正常使用。 ### 回答2: Vue3打包代理失效可能是由于Vue3的打包配置问题导致的。 首先,我们需要确定是否在Vue3项目中使用了代理配置。代理用于在开发环境中将请求转发到其他服务器,方便调试。在Vue3中,常常会在vue.config.js(或类似的配置文件)中进行代理配置。 如果代理在开发环境中正常工作,但在打包失效,那么可能是打包配置中没有包含代理设置。 解决方法之一是在打包配置文件中添加代理配置。可以尝试在vue.config.js中添加类似以下的代码: ``` module.exports = { // ... devServer: { // ... proxy: { '/api': { target: 'http://localhost:5000', // 代理的目标地址 pathRewrite: { '^/api': '' }, // 路径重写 changeOrigin: true, // 支持跨域 }, }, }, // ... }; ``` 以上配置将会将所有以`/api`开头的请求转发到`http://localhost:5000`服务器,并且支持跨域。根据实际需求进行修改。 另外,还需要确保在打包后的代码中引入了正确的配置文件。可以在打包后的文件中搜索`vue.config.js`,确认打包后是否包含该文件。如果没有,那么可能是配置文件的路径不正确,或者配置文件没有被正确引入。 总结起来,如果Vue3打包代理失效,需要检查并确保以下几点: 1. 在打包配置文件中包含了代理配置。 2. 确保打包后的代码中引入了正确的配置文件。 3. 验证代理的目标地址、路径重写等配置是否正确。 希望以上回答能够帮助到你解决问题。如有更多疑问,请随时追问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值