国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

vue多環(huán)境配置方案

zhouzhou / 596人閱讀

摘要:前端項(xiàng)目上線的時(shí)候不可避免的會(huì)考慮到不同的運(yùn)行環(huán)境需要前端請(qǐng)求不同服務(wù)地址的問題方案一一般的情況下可以使用環(huán)境變量進(jìn)行分環(huán)境打包開發(fā)環(huán)境繼續(xù)使用代理需要編譯的環(huán)境通過設(shè)置環(huán)境變量去控制打包過程最終生成適用于不同環(huán)境的前端資源有關(guān)環(huán)境

前端項(xiàng)目上線的時(shí)候 , 不可避免的會(huì)考慮到不同的運(yùn)行環(huán)境需要前端請(qǐng)求不同服務(wù)地址的問題

方案一 :
一般的情況下 , 可以使用vue-cli-service環(huán)境變量進(jìn)行分環(huán)境打包 ;
開發(fā)環(huán)境 , 繼續(xù)使用proxy代理 ;
需要編譯的環(huán)境 , 通過設(shè)置環(huán)境變量去控制打包過程 , 最終生成適用于不同環(huán)境的前端資源 ;
有關(guān)vue-cli-service環(huán)境變量的具體解釋在另一篇文章中有詳解 , 這里我們只關(guān)注實(shí)現(xiàn)
首先 , 我們需要添加各個(gè)環(huán)境的env配置文件 , 放在項(xiàng)目的根目錄

我們以聯(lián)調(diào)環(huán)境為例 , 添加了一個(gè).env.build_dev 文件
.env.build_dev

NODE_ENV="production" //表明這是需要編譯的環(huán)境(需要打包)
VUE_APP_CURRENTMODE="production" // 自定義的模式信息
VUE_APP_BASE_SERVER="http://****:8080" // 自定義的接口地址

在接口管理api.js文件中

import { fetchpost, fetchget, fetchput, fetchdelete } from "./config";
// 分環(huán)境打包
let baseUrl = "";
if (process.env.NODE_ENV == "development") {
  baseUrl = "/base"
} else if (process.env.NODE_ENV == "production") {
  baseUrl = process.env.VUE_APP_BASE_SERVER
} else {
  baseUrl = ""
}

export default {
  // 登錄
  login(params) {
    return fetchpost(
            `${baseUrl}/apis/v1/login`,
            params
        );
    },
  // 修改密碼
  setpsw(params) {
    return fetchput(
            `${baseUrl}/apis/v1/users/password`,
            params
        );
    },
    ...........略

接下來 , 我們需要在項(xiàng)目的package.json文件中為聯(lián)調(diào)環(huán)境添加一個(gè)編譯指令 "build_dev" , 并指定編譯模式
package.json

"scripts": {
        "serve": "vue-cli-service serve",
        "build": "vue-cli-service build",
        "build_dev": "vue-cli-service build --mode build_dev",
        "build_pre_release": "vue-cli-service build --mode build_pre_release",
        "build_test": "vue-cli-service build --mode build_test",
        "lint": "vue-cli-service lint"
    },

這樣 , 我們通過不同的指令去編譯對(duì)應(yīng)環(huán)境的前端資源

方案二 :
另一種方式, 是將前端請(qǐng)求的服務(wù)地址抽離出來 , 放進(jìn)配置文件里面 ,
開發(fā)環(huán)境 , 繼續(xù)使用proxy代理 ;
需要編譯的環(huán)境 , 可以直接修改編譯后的文件中的配置文件
這樣的好處如下:
1: 前端不需要重復(fù)進(jìn)行打包編譯 ;
2: 自動(dòng)化部署的時(shí)候可以使用腳本去替換前端資源中的配置文件 ;
3: 如果采用前端Docker化 , 可以在制作鏡像的過程中修改/替換配置文件 ;

首先 , 我們將config.json文件放置在public文件夾中(防止被webpack編譯)

在里面我們簡(jiǎn)單存放一個(gè)服務(wù)地址字段
config.json

{
  "SERVER_URL": ""
}

接下來,需要保證項(xiàng)目開始加載前 , 我們已經(jīng)獲取到這個(gè)配置文件了 , 所以在main.js 里面 , 我們需要先獲取這個(gè)配置文件 , 再實(shí)例化vue

mian.js

import axios from "axios"
// vue實(shí)例
function createdVue () {
  return new Vue({
    router,
    store,
    render: h => h(App)
    }).$mount("#app");
}
if (process.env.NODE_ENV == "development") {
    // 放在public文件夾下的靜態(tài)文件需要通過絕對(duì)路徑去獲取
    axios.get("/config.json").then(res=>{
      // 開發(fā)環(huán)境通過proxy代理的形式 , 不需要獲取配置地址
      Vue.prototype.SERVER_URL = ""
      createdVue()
    })
} else if (process.env.NODE_ENV == "production") {
    // 放在public文件夾下的靜態(tài)文件需要通過絕對(duì)路徑去獲取
    axios.get("/config.json").then(res=>{
      // 將獲取到的配置文件作為全局變量保存
      Vue.prototype.SERVER_URL = res.SERVER_URL
      // 成功獲取到配置后再去創(chuàng)建vue實(shí)例
      createdVue()
    })
  } 

一般項(xiàng)目中 , 我們都會(huì)對(duì)axios進(jìn)行統(tǒng)一封裝 , 為axios創(chuàng)建一個(gè)config.js 文件 , 里面對(duì)axios請(qǐng)求頭 , baseUrl , 請(qǐng)求攔截 , 各種請(qǐng)求方式進(jìn)行配置
在這里我們?yōu)槊總€(gè)請(qǐng)求添加baseUrl
config.js

import axios from "axios"
import Vue from "vue";
import qs from "qs"
import Router from "@/router.js"
import {Message} from "element-ui"
// axios.defaults.timeout = 10000     // 響應(yīng)時(shí)間
// 獲取全局變量中的服務(wù)地址
function getBaseUrl () {
  return Vue.prototype.SERVER_URL
}
// 配置請(qǐng)求頭
axios.defaults.headers.post["Content-Type"] = "application/json"

// 添加請(qǐng)求攔截器
axios.interceptors.request.use((config) => {
  // 為每次請(qǐng)求添加baseUrl  
  config.baseURL = getBaseUrl()
  if (sessionStorage.token) {
    config.headers["Authorization"] = sessionStorage.token
  }
  return config
}, (error) => {
  return Promise.reject(error)
})

// 添加響應(yīng)攔截器
axios.interceptors.response.use((res) => {
  // 如果錯(cuò)誤碼!==0;拋出異常
  if (res.data.code && res.data.code !== 0) {
    switch (res.data.code) {
      case 1001:
        // 無權(quán)限
        Router.replace("/login")
        break;
      case 1003:
        // 訪問身份不合法
        Router.replace("/login")
        break;
      default:
        break;
    }
    let message = res.data.msg || "出錯(cuò)了"
    return Promise.reject({message: message, err: res})
  } else {
    return Promise.resolve(res.data)
  }
}, (error) => {
  let message = "服務(wù)器錯(cuò)誤"
  return Promise.reject({message: message, err: error})
})

// 返回一個(gè)Promise(發(fā)送post請(qǐng)求)
export function fetchpost (url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, params).then(response => {
      resolve(response.data)
    }).catch((error) => {
      reject(error)
    })
  })
}
// 返回一個(gè)Promise(發(fā)送get請(qǐng)求)
export function fetchget (url, params) {
  return new Promise((resolve, reject) => {
    axios.get(url, {params: params}).then(response => {
      resolve(response.data)
    }).catch((error) => {
      reject(error)
    })
  })
}

// 返回一個(gè)Promise(發(fā)送put請(qǐng)求)
export function fetchput (url, params) {
  return new Promise((resolve, reject) => {
    axios.put(url, params).then(response => {
      resolve(response.data)
    }).catch((error) => {
      reject(error)
    })
  })
}
// 返回一個(gè)Promise(發(fā)送delete請(qǐng)求)
export function fetchdelete (url, params) {
  return new Promise((resolve, reject) => {
    axios.delete(url, params).then(response => {
      resolve(response.data)
    }).catch((error) => {
      reject(error)
    })
  })
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/104887.html

相關(guān)文章

  • vuecli3 vant rem 移動(dòng)端框架方案

    摘要:描述基于適配方案封裝,構(gòu)建手機(jī)端模板腳手架幫你做好的配置有多環(huán)境開發(fā)封裝適配方案生產(chǎn)環(huán)境優(yōu)化首屏加速低版本瀏覽器兼容環(huán)境發(fā)布腳本可以上手直接寫代碼多環(huán)境開發(fā)之前寫過一個(gè)多環(huán)境的方案,是基于的多環(huán)境配置方案?jìng)魉烷T最近新的項(xiàng)目采用了開始了 描述 基于vue-cli3.0+webpack 4+vant ui + sass+ rem適配方案+axios封裝,構(gòu)建手機(jī)端模板腳手架 幫你做好的配置...

    since1986 評(píng)論0 收藏0
  • vue環(huán)境配置方案

    摘要:前言一般服務(wù)器分為本地環(huán)境,測(cè)試環(huán)境,正式環(huán)境如果每次都要修改配置就很麻煩,總結(jié)一下我使用的方法修改執(zhí)行命令修改文件的,在打包的時(shí)候執(zhí)行不同的命令,測(cè)試執(zhí)行那正式執(zhí)行這里用到了能跨平臺(tái)地設(shè)置及使用環(huán)境變量,使用 前言 一般服務(wù)器分為本地環(huán)境,測(cè)試環(huán)境,正式環(huán)境如果每次都要修改配置就很麻煩,總結(jié)一下我使用的方法 vue-demo/ |-build/ |-config/ |-d...

    劉德剛 評(píng)論0 收藏0
  • 關(guān)于Vue2一些值得推薦的文章 -- 五、六月份

    摘要:五六月份推薦集合查看最新的請(qǐng)點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語(yǔ)。葉上初陽(yáng)乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門,久作長(zhǎng)安旅。五月漁郎相憶否。小楫輕舟,夢(mèng)入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請(qǐng)::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...

    sutaking 評(píng)論0 收藏0
  • 關(guān)于Vue2一些值得推薦的文章 -- 五、六月份

    摘要:五六月份推薦集合查看最新的請(qǐng)點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語(yǔ)。葉上初陽(yáng)乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門,久作長(zhǎng)安旅。五月漁郎相憶否。小楫輕舟,夢(mèng)入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請(qǐng)::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...

    khs1994 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<