前言
往往在開發過程中,前端axios 連接的ip 地址 是內部服務器,甚至不止一個,可能有多個,那么在封裝axios 工具的時候我們通常用這種方式
const axiosbaseurl = process.env.NODE_ENV==='development' ? 'http://192.168.2.125:8890':'http://192.168.2.126:8890'
const requsturlone = process.env.NODE_ENV==='development' ? 'http://192.168.2.125:8891':'http://192.168.2.126:8892'
總之前端一個工程中要連接多少個app 就寫多少行配置,那么開發環境切換到生產環境 后 ,我們需要把內部ip 換成 生產環境ip,所做的就是在源碼里將上述的地址改成需要的ip 編譯部署,個人覺得這樣不太適合。日后的自動化運維部署,並且動源碼總是感覺不太好,於是想將相關的配置文件寫到config.js 中,通過手動修改config.js 中內容直接可以更改url ,這樣不用我每次動源碼再去編譯了
正題 :
於是乎我在模塊里引入外部config.js
import {ip,port} from "../public/static/config.js"
這么看很合理,開發環境中那個,我修改config.js 中的ip axios 請求url 也相應改變,但是當我 build 后,再在config.js 里修改相關ip port 時 axios 始終以修改前的ip 和port 為地址,根本不變化,這里深層次的原因沒有弄明白,大致總結了下,應該時webpack 在編譯的時候就已經將config.js 內容編譯到代碼中了,當我們在瀏覽器中加載前端js , js 並沒有動態的從相關文件中尋找。這里我去看了下 import 和 require 的引用機制,換成 require 引入,require是運行時加載,但還是不行,問題應該是出在了webpack 這里。
換種思路方法;
通過在 index.html 中 script 引入靜態文件,將文件內容掛載到window 對象上,那么在我的axios 模塊中就可以通過window 動態的加載config.js 中的內容了。
<script type="text/JavaScript" src="/static/ipconfig.js"></script>
axios 引入
const ipconfig = window.$ipconfig
解決問題。。。