webpack-dev-server同理。
以下都是我自己总结的,大概率不对,因为在小村子里,不知道这种问题的最佳实践是什么
从哪说起呢,我觉得vue官网写的不够清晰,不过我觉得大概率应该是我的理解能力有限。下面是官网链接:
cli.vuejs.org/zh/config/#…
我主要被卡在的问题是 按照官网和网上查到的配置方法弄了,但没有改baseURL,所以导致配置的跨域无效,我觉得这个原因应该是网上大量搜索proxy配置无效的问题所在,并不是什么忘记重启服务。
module.exports = {
devServer: {
proxy: {
'/api': { // {{1}}
target: '<url>', //{{2}}
changeOrigin: true // {{3}}
pathReWrite: {
'^/api':'' //{{4}}
}
},
'/foo': {
target: '<other_url>'
}
}
}
}
下面我来认真的解释一下上面的1、2、3、4(不墨迹那些 诸如什么是跨域,这里解决跨域的原理是什么,我知道你们都懂)
1: 这里马勒个巴子的都喜欢用这个“/api” 举例子,可能都是跟官网学的,实际你写啥都行(和后面能对应上就行),说白了就是一个跨域标识,告诉他你这个连接要用代理. 不然的话, 可能你的 html, css, js这些静态资源都跑去代理. 所以我们只要接口用代理, 静态文件用本地,也就是说,
凡是api开头的url(就是1配置的这个东西),我都走代理
凡是
,是真的完全由1配置的开头,不带你之前在axios里配置的baseURL的,明白了吧。所以有几个解决方案
(1):你已经配置了baseURl,那么假如你的借口地址是"aaa/bbb/ccc",那么你可以在axios请求前的钩子里做判断
if(config.url.indexOf(aaa) > -1 ) {
config.baseURL = api/aaa/bbb/ccc // 把baseURL换成api开头的这个东西,然后请求的时候,你这个东西前面会自动给拼接上{{2}}填的target,但此时你发现你这个地址变成htpps://xxx/api/aaa/bbb/ccc,多了一个api,所以我们在{{5}}这个位置把api replace成空
(2)直接
const baseURL = process.env.node_env === 'dev' ? '/api' : 'http://xxx/ss'
上面的写法就是,只要是开发环境,那我就把所有的请求前面全拼上api。也就是说全走代理,一劳永逸
2:这里填写你们后台的地址,就是你本来要请求的但是被跨域限制的地址,不是你起的服务那个地址,你要理解原理就应该不会有这个疑问。这块就强调一下这个就行了
3.跨域开关,一定是要打开的
4.上面解释过了,不赘述了
参考链接:
segmentfault.com/q/101000001…
www.jianshu.com/p/b765c99d4…