vue-cli 打包相關(guān)

1.可修改配置文件相關(guān)

為了方便打包后生產(chǎn)可修改配置文件,用于修改一些可能會變化的接口地址,參數(shù)等,可以在staic下添加config.js配置文件:


image.png

配置文件內(nèi)添加一些打包生產(chǎn)后可以修改的變量,并掛載到window下:

var config = {
  redirect_uri: "http://192.168.1.60:8080/",
  grant_type: "authorization_code",
  client_id: "client_test",
  client_secret: "666666",
  login_url: 'http://192.168.1.87:18088/oauth/authorize?client_id=client_test&response_type=code&scope=read&redirect_uri=http://192.168.1.60:8080/#/UserManager'
}
window.OauthConfig = config

然后在index.html引入即可

 <script type="text/javascript" src="./static/config.js"></script>

*注意staic是相對路徑
*注意 一定要是var聲明,let聲明會造成配置文件更改無效

然后在項目內(nèi),直接通過window.OauthConfig.client_id就可以讀取到文件內(nèi)的client_id,其他變量也是相同的方式獲取。
(*如果不掛載到window下,使用export 方式將config導(dǎo)出,然后在其他頁面導(dǎo)入,這樣的話在打包后,對config修改將不會改變文件內(nèi)的值,可能是這種方式webpack直接將變量寫進(jìn)了各個文件)

2.項目生產(chǎn)環(huán)境與開發(fā)環(huán)境的接口配置

2-1單接口

在以前的項目中,對于與后臺交互只有一個接口的情況下,
開發(fā)環(huán)境配置代理:

proxyTable: {
  '/DataCenter': {
        target: 'http://192.168.1.87:18091/', // 接口的域名
        // secure: false,  // 如果是https接口,需要配置這個參數(shù)
        changeOrigin: true, // 如果接口跨域,需要進(jìn)行這個參數(shù)配置
        pathRewrite: {
          '^/DataCenter': '/DataCenter'
        }
      },
}

然后在api.js寫接口的時候:

const rootPath ='/DataCenter'
export const apiRoleAndPer = params =>post(rootPath + '/role/addProle',params);

切記不可使用下面的書寫方式
const rootPath=''
 export const apiRoleAndPer = params => post(rootPath + '/DataCenter/role/addProle' ,params)

rootPath本意是服務(wù)器放置前端項目的根目錄(/DataCenter)
開發(fā)環(huán)境遇到/DataCenter開頭的地址,nodeJs會代理到192.http://192.168.1.87:18091上的/DataCenter接口下,也就是說無論開發(fā)環(huán)境還是生產(chǎn)環(huán)境
DataCenter都是真實存在的目錄,但是按照第二種寫法,起初的想法是/DataCenter當(dāng)一個別名的存在,(oauth項目中,為了區(qū)分8088與8091而隨意寫了DataCenter與/DataUser)
export const apiRoleAndUser = data => post(rootPath + '/DataCenter/role/addUserRole', data);//8088
export const apiUserDel = id => get(rootPath + '/DataUser/user/del/' + id)//8091
認(rèn)為這樣寫遇到不同的DataCenter與DataUser,就會轉(zhuǎn)發(fā)到不同端口
的確開發(fā)環(huán)境下可以實現(xiàn),但是打包出來后
真實的請求地址會是這樣:http://192.168.1.60/DataUser/user/del/
DataUser被當(dāng)成了真實的路徑打包了。這樣寫其實忽略了rootPath,如果是單接口,將const rootPath ='后臺目錄'
這樣,無論生產(chǎn)還是開發(fā)環(huán)境都可以對應(yīng)到真實目錄

2-2 多接口情況

按照上述所說,單接口情況下將rootPath寫成后臺目錄,在proxyTable代理時,pathRewrite重寫保持 '^/DataCenter': '/DataCenter',這樣開發(fā)和生產(chǎn)都可以正確找到規(guī)定的目錄。
那么假如后臺沒有主目錄呢?或者多接口情況如何處理?
兩種情況都可以使用一種辦法解決:
http.js

let Header ={
    user:'',  //接口1
    data:''   //接口2
};
// 環(huán)境的切換
if (process.env.NODE_ENV == 'development') {
    axios.defaults.baseURL = '';
    Header.user = '/DataUser' //8088
    Header.data = '/DataCenter'//8091
} else if (process.env.NODE_ENV == 'production') {
    axios.defaults.baseURL = 'http://192.168.1.36:9000' 
    Header.user = 'http://192.168.1.35:9000' //8088
    Header.data = ''//8091
}
export let programHeader = Header;
判斷當(dāng)前環(huán)境:

開發(fā)環(huán)境下:將多個接口指定對應(yīng)的名稱,這個名稱應(yīng)該與代理中的字段相同。
開發(fā)環(huán)境下:理論上全部寫成空' '

*但是多接口情況下,axios.defaults.baseURL只能設(shè)置一個,正因為多接口,所以不可能是相同的baseurl,所以解決辦法:請求接口多的那一項直接設(shè)置為空,請求少的那一項,寫上接口全路徑:

然后api.js

import { get, post, programHeader} from './http'
...export data接口的相關(guān)n個接口
export const data=()=>get((programHeader.data+'/list')
export const user=()=>get(programHeader.user+'/manager')

那么真實的請求會是這樣:
data接口: Request URL: http://192.168.1.36:9000/list
user接口: Request URL: http://192.168.1.35:9000/manager

相當(dāng)于在引用別名的時候,生產(chǎn)環(huán)境下將全路徑賦予別名,這樣就覆蓋了只能設(shè)置一項的baseUrl,也就請求了不同的接口
注意必須寫全路徑 http://...,如果不寫http,那么無法覆蓋,會在原路徑后追加鏈接

相當(dāng)于axios的baseUrl是baidu.com,
然后請求的時候?qū)慻et(http://qq.com/manager),那么實際qq覆蓋了百度
一個接口,后臺沒有根目錄也是這樣解決,生產(chǎn)環(huán)境將別名設(shè)置為空即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 錯誤一:文件丟失 方案:修改config文件夾下的index.js文件 錯誤二:圖片丟失 方案:修改build.j...
    UmustHU閱讀 188評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,917評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 我覺得春天是一個彩筆盒。 一到春天,綠彩筆刷綠了樹;紅彩筆刷紅了太陽,太陽又一次帶著溫暖的光到來了。太陽...
    李朔寶貝閱讀 420評論 1 5
  • 1月3日,王思聰在一條強推沖頂大會APP的微博引爆了直播答題游戲。目前,已經(jīng)有西瓜視頻、沖頂大會、KK直播、花椒直...
    何璽閱讀 439評論 0 1

友情鏈接更多精彩內(nèi)容