<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近在學習或工作中遇到,把 Vue 前端專案打包後,要求可以再次修改請求後端介面的基礎地址。平常開發中在 Vue 專案中使用 axios 時把請求後端介面的基礎地址寫在了 baseURL 裡。
這樣子打包後如果要改圖裡紅框處的地址,要麼去打包編譯後的檔案堆裡一個個搜尋(如果專案不小的話,這檔案堆可不少...),找到後直接改,要麼在原始碼裡改完後重新再打包部署,這兩種做法都顯得有些麻煩,且維護性也不好。
所以本文用一種較好的方案來解決以上問題,通過建立一個靜態資源裡的外部檔案,引入並實時獲取,實現在 Vue 專案打包後也能方便修改請求後端介面的基礎地址。
1、前提:本文基於 vue-cli 3.x / 4.x 來實現的,相對應 vue-cli 2.x 來說,沒有那麼多複雜的設定操作(少了 build、config 資料夾和一些組態檔,多了 public 資料夾和 vue.config.js 檔案)。
2、public 資料夾就是存放那些不需要打包的檔案,可以直接存取(靜態資源),建立一個含有請求後端介面基礎地址的檔案 config.json 放在此目錄下( npm run build 時該檔案不會受影響),如下圖:
{ "BASE_URL_DEV": "https://www.dev-api.com", "BASE_URL_PROD": "https://www.prod-api.com" }
3、 接下來在 main.js 檔案中請求定義的組態檔,並寫入 Vue.prototype,使其可全域性存取。同時建立 Vue 範例也放在請求後,為了防止頁面生成和請求的資料有出入。相關程式碼如下:
import axios from 'axios' import { getUrlParams } from './utils/index' // 工具函數:獲取 URL 上的引數 Vue.prototype.$axios = axios function getServerConfig() { // 定義 axios.get('./config.json').then(res => { // 請求上面描述的本地組態檔 const urlDev = getUrlParams('env') // 當 URL 上存在 env=prod 時請求地址為生產環境的 Vue.prototype.BASE_URL = urlDev == 'prod' ? res.data.BASE_URL_PROD : res.data.BASE_URL_DEV console.log('介面設定的基礎地址', Vue.prototype.BASE_URL) new Vue({ el: '#app', router, store, render: h => h(App) }) }) } getServerConfig() // 執行
這裡有個獲取 URL 上引數的工具函數,寫在 utils/index.js 裡,相關程式碼如下:
// 獲取 URL 上的引數 export function getUrlParams(name) { if (name == null || name === 'undefined') { return null } var searchStr = decodeURIComponent(window.location.href).replace('?', '&') var infoIndex = searchStr.indexOf(name + '=') if (infoIndex === -1) { return null } var searchInfo = searchStr.substring(infoIndex + name.length + 1) var tagIndex = searchInfo.indexOf('&') if (tagIndex !== -1) { searchInfo = searchInfo.substring(0, tagIndex) } return searchInfo }
4、然後對 Vue 專案裡封裝的 axios 檔案 request.js 做點改造,目的是通過函數返回值能實時獲取到基礎介面地址的變更,這樣後續打包部署的專案不用重新啟動,直接重新整理頁面就可以。相關程式碼如下:
import Vue from 'vue' import axios from 'axios' function getBaseUrl(){ return Vue.prototype.BASE_URL } const service = axios.create({ baseURL: getBaseUrl(), // 打包後可設定的方式 withCredentials: true, timeout: 50000 // request timeout }) // ... 其餘剩下部分與本文無關,就沒有寫出了 ...
5、最後進行驗證,在 URL 上帶不同引數,本地執行專案後檢視控制檯輸出。
修改 config.json 檔案裡的內容如下,再次驗證。
本地執行驗證通過後,npm run build 打包後再驗證。
剩下就是部署釋出的操作了(不屬於本文講述範圍了哈),以後如果該專案請求後端介面地址變動,只需要改動打包後資料夾(dist 資料夾)裡的 config.json 檔案,無需重新啟動部署的專案,只需要重新整理頁面就可以了。
到此這篇關於Vue專案打包後可修改基礎介面地址設定的文章就介紹到這了,更多相關Vue打包後修改基礎介面地址內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45