vue_cli3中axios封裝驯嘱、配置不同開發(fā)環(huán)境變量

項目開發(fā)中,一般都會有開發(fā)環(huán)境、測試環(huán)境丽蝎、預生產(chǎn)環(huán)境盔憨、生產(chǎn)環(huán)境等多個環(huán)境誉尖,所以項目在打包時我們就會調(diào)用不同環(huán)境的接口烤咧,此時我們就要通過配置變量來解決這一問題。

一酪耳、配置不同環(huán)境變量

下面以開發(fā)浓恳、測試、預生產(chǎn)、生產(chǎn)這4個環(huán)境為例颈将。

1梢夯、在項目根目錄創(chuàng)建4個不同的文件,代表不同的環(huán)境配置

  • 開發(fā)環(huán)境: .env.development
  • 測試環(huán)境: .env.qa
  • 預生產(chǎn)環(huán)境: .env.stage
  • 生產(chǎn)環(huán)境: .env.production

2吆鹤、在不同文件配置變量

  • .env.development
NODE_ENV = 'development'
VUE_APP_BASE_URL = 'http://www.development.api'
  • .env.qa
NODE_ENV = 'qa'
VUE_APP_BASE_URL = 'http://www.qa.api'
  • .env.stage
NODE_ENV = 'stage'
VUE_APP_BASE_URL = 'http://www.stage.api'
  • .env.production
NODE_ENV = 'production'
VUE_APP_BASE_URL = 'http://www.production.api'

注意:
1厨疙、這里聲明的NODE_ENV = 'development' 就表示開發(fā)環(huán)境
2洲守、除了 baseUrl 和 NODE_ENV ,其他環(huán)境變量使用 VUE_APP 開頭 ,比如VUE_APP_XXX
3疑务、然后我們可以通過process.env.VUE_APP_XXX來取到定義好的環(huán)境變量
4、下文在封裝axios的js文件中賦值baseUrl的時候就會通過環(huán)境變量取值

3梗醇、配置打包命令package.json

  "scripts": {
    "dev": "vue-cli-service serve",
    "dev-qa": "vue-cli-service serve --mode qa",
    "dev-stage": "vue-cli-service serve --mode stage",
    "dev-product": "vue-cli-service serve --mode production",
    "build-qa": "vue-cli-service build --mode qa",
    "build-stage": "vue-cli-service build --mode stage",
    "build-product": "vue-cli-service build --mode production"
  },

說明:
npm run dev表示:vue-cli-service serve會默認執(zhí)行.env.development文件
--mode qa來指定執(zhí)行.env.qa文件
--mode stage來指定執(zhí)行.env.stage文件
--mode production來指定執(zhí)行.env.production文件

二知允、axios二次封裝

1、創(chuàng)建request.js文件

src下創(chuàng)建一個utils文件夾叙谨,用來放一些工具類型的文件温鸽,首先在里面創(chuàng)建一個用來封裝axios的文件request,當然文件名自定義

//src/utils/request.js
import axios from 'axios'

// 創(chuàng)建 axios 實例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL, // url = base url + request url
  timeout: 10000, // request timeout
})

//  請求攔截器
service.interceptors.request.use(
  (config) => {
    config.headers['Content-Type'] = 'application/json;charset=UTF-8'
    config.headers['Accept'] = 'application/json'
    config.headers['Request-From'] = 'mobile'
    let token = sessionStorage.getItem('loginToken') || null
    if (token) {
      // 如果token不為null手负,否則傳token給后臺
      config.headers['Token'] = token
    }
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 響應(yīng)攔截器
service.interceptors.response.use(
  (response) => {
    const res = response.data
    //屆時根據(jù)后端返回success或者code值判斷
    if (res.success === true) {
      return res
    } else {
      return res
    }
  },
  (error) => {
    //響應(yīng)錯誤
    return Promise.reject(error)
  }
)

export default service

注:文件中的baseURL: process.env.VUE_APP_BASE_URL則就是根據(jù)不同環(huán)境取不同的接口地址

2涤垫、創(chuàng)建common.js文件

src下創(chuàng)建一個api文件夾,用來放一些接口的文件,當接口過多的時候可以分類創(chuàng)建接口文件竟终,目前我們先創(chuàng)建一個公共的文件common.js,然后引入剛才封裝的request.js文件

//src/api/common.js
import request from '@/utils/request'

/**
 * POST 方法 與 GET方法  區(qū)別
 *
 * post==> data: obj
 * get==>params: obj
 *
 */
// 例如(post):
 export function updateBook(obj) {
   return request({
     url: '/book/update',      // url = base url + request url
     method: 'post',
     data: obj,    //----------------->>>區(qū)別
   })
 }
// 例如(get):
 export function getBookList(obj) {
   return request({
     url: '/book/list',      // url = base url + request url
     method: 'post',
     params: obj,    //----------------->>>區(qū)別
   })
}

3蝠猬、頁面中使用

<template>
  <div class="booktest"></div>
</template>
<script>
import { getBookList, updateBook } from '@/api/common'   //路徑
export default {
  name: '',
  data() {
    return {}
  },
  methods: {
    //get方式
    getBookList() {
      let params = {
        userName: '張三',
      }
      getBookList(params).then((res) => {
        //返回值
      })
    },
    //post方式
    updateBook() {
      let params = {
        bookId: 1,
      }
      updateBook(params).then((res) => {
        //返回值
      })
    },
  },
}
</script>

三、vue.config.js配置

module.exports = {
    // 選項...
    /* 部署應(yīng)用包的基本URL */
    publicPath: './',

    /* 當運行 vue-cli-service build 時生成的生產(chǎn)環(huán)境構(gòu)建文件的目錄 defalut: dist */
     outputDir: './dist',
    //可根據(jù)不同環(huán)境打包不同地址
    //outputDir: process.env.NODE_ENV == 'production' ?
       // '../../../../dist-mobile/product/course' : process.env.NODE_ENV == 'stage' ?
       // '../../../../dist-mobile/stage/course' : process.env.NODE_ENV == 'qa' ?
        //'../../../../dist-mobile/qa/course' : '../../../../dist-mobile/run/course',

    /* 放置生成的靜態(tài)文件目錄(js css img) */
    assetsDir: 'static',

    /* 指定生成的index.html 輸出路徑 相對 default: index.html */
    indexPath: 'index.html',

    /* 指定生成文件名中包含hash default: true */
    filenameHashing: true,

    // 所有 webpack-dev-server 的選項都支持统捶。
    devServer: {
        host: '0.0.0.0',
        port: 8888, // 端口號
        https: false,
        open: false, //配置自動啟動瀏覽器

        // 配置多個代理
        proxy: {
            '/api': {
                target: process.env.VUE_APP_BASE_URL, // 代理服務(wù)器路徑
                changeOrigin: true,
                pathRewrite: {
                    '^/api': '', // 去掉接口地址中的api字符串
                },
            },
        },
    },
}

這樣就完成了根據(jù)不同項目啟動命令,來自動配置不同環(huán)境,匹配指定接口地址了
例如:
啟動npm run dev-qa,
執(zhí)行vue-cli-service serve --mode qa,
根據(jù)--mode qa,
查找.env.qa文件 ,
獲得環(huán)境NODE_ENV為:qa環(huán)境, 接口地址VUE_APP_BASE_URL為:http://www.qa.api
所以封裝的axios中的baseUrl地址就是http://www.qa.api
調(diào)用后的地址就是:http://www.qa.api/book/list
大概就是這么個流程榆芦,
接下來就可以愉快的開發(fā)了.

文件目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市喘鸟,隨后出現(xiàn)的幾起案子匆绣,更是在濱河造成了極大的恐慌,老刑警劉巖什黑,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崎淳,死亡現(xiàn)場離奇詭異,居然都是意外死亡愕把,警方通過查閱死者的電腦和手機凯力,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來礼华,“玉大人咐鹤,你說我怎么就攤上這事∈バ酰” “怎么了祈惶?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我捧请,道長凡涩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任疹蛉,我火速辦了婚禮活箕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘可款。我一直安慰自己育韩,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布闺鲸。 她就那樣靜靜地躺著筋讨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摸恍。 梳的紋絲不亂的頭發(fā)上悉罕,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音立镶,去河邊找鬼壁袄。 笑死,一個胖子當著我的面吹牛媚媒,可吹牛的內(nèi)容都是我干的嗜逻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼欣范,長吁一口氣:“原來是場噩夢啊……” “哼变泄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恼琼,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤妨蛹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后晴竞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛙卤,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年噩死,在試婚紗的時候發(fā)現(xiàn)自己被綠了颤难。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡已维,死狀恐怖行嗤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垛耳,我是刑警寧澤栅屏,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布飘千,位于F島的核電站,受9級特大地震影響栈雳,放射性物質(zhì)發(fā)生泄漏护奈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一哥纫、第九天 我趴在偏房一處隱蔽的房頂上張望霉旗。 院中可真熱鬧,春花似錦蛀骇、人聲如沸厌秒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽简僧。三九已至建椰,卻和暖如春雕欺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棉姐。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工屠列, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伞矩。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓笛洛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乃坤。 傳聞我的和親對象是個殘疾皇子苛让,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354