通常一个项目的开发,都会部署到三个环境中。

开发环境:供开发自己调试接口,解决bug。

测试环境:供测试人员测试,提出bug。

线上环境:供用户使用。

这三个环境中的数据应该是相互独立,互不影响的,所以就会存在3个后台接口地址。那不能每次要发布到不同的环境上,都得手动修改在打包,这样太麻烦啦!

最好的办法就是将url单独提取到一个文件中,每次要修改路径了,直接改这个文件就能达到目的。

然后我们就开始提取工作~

创建文件

static > js 在这个路径下创建serverurl.js,内容为后台接口的ip地址(一般三个环境接口的区别就是ip不同)

export default 'http://xx.xx.xx/'

为什么放在static里面,而不是src > assets里呐?通过实践证明:运行npm run build 后生成的dist文件夹中,不会存在assets文件夹里面的文件,他们全部被打包到一起啦!而只要是放在static文件夹里面的,都幸免于难。因为我们最后是要修改serverurl.js这个文件的,所以不能让它被打包了!

引用文件

哪里需要用到后台接口的ip地址,就用以下代码

import serverurl from '../static/js/serverurl' //'../static/js/serverurl'是具体项目中serverurl的位置,这里只做演示

然后就进行正常的开发流程,最后npm run build,修改dist > static > js > serverurl.js里面的ip地址,然后将文件夹里面的内容部署到服务器。大功告成!

出现问题

但是!!!你会发现刚刚明明已经修改了serverurl.js的地址,但是接口访问的还是修改前的,到底哪里出了问题!!??

通过搜索,发现修改前的地址被打包进了app.xxx.js.map和app.xxx.js,虽然我们修改了地址,但是看来打包后应用的并不是我们的serverurl.js:(

改造

感谢请叫我流川枫好吗提供思路,新方案不采用import方式引入ip

修改serverurl.js内容

"http://xx.xx.xx/"

经实践标明,一定要用双引号!除了ip地址什么都不要填!理由下面会说明

修改引入方式

axios.get('static/js/serverurl.js').then((data) => {
localStorage.setItem('serverurl', response.data);//由于是异步操作,为了通信,可以采用localstorage,把东西存起来
}, (data) => {
console.log(data)
})

可以看到这里采用的是直接读取的方式,serverurl.js里面的所有内容会作为response.data存储到localStorage里面,所以如果使用的是单引号,那么读到的数据会是'http://xx.xx.xx/'这种形式,如果写入注释等一样会被全部读取到

获取ip地址

哪里需要ip地址,直接从localStorage里面读取即可

localStorage.getItem('serverurl')

这样再进行打包发布的时候,直接修改serverurl.jsip地址,修改完刷新就能立马生效!

大功告成~撒花❀~~