最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue動(dòng)態(tài)代理無(wú)須重啟項(xiàng)目解決方案詳解

 更新時(shí)間:2022年09月19日 17:05:03   作者:Atdow  
這篇文章主要為大家介紹了vue動(dòng)態(tài)代理無(wú)須重啟項(xiàng)目解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1.背景

當(dāng)我們vue構(gòu)建項(xiàng)目的時(shí)候,都會(huì)在vue.config.js中配置我們需要代理的服務(wù)器地址。有時(shí)候我們需要使用不同后端服務(wù)器地址,也就是我們開(kāi)發(fā)中所說(shuō)的測(cè)試環(huán)境、灰度環(huán)境、正式環(huán)境等,這個(gè)時(shí)候如果我們需要使用不同的環(huán)境地址的時(shí)候,就需要使用命令或者手動(dòng)修改vue.config.js中配置來(lái)重新啟動(dòng)項(xiàng)目。當(dāng)項(xiàng)目項(xiàng)目越來(lái)越大的時(shí)候,我們需要很長(zhǎng)的時(shí)間來(lái)啟動(dòng)項(xiàng)目,如此反復(fù),極大影響我們開(kāi)發(fā)進(jìn)度。這個(gè)時(shí)候我們急需一種vue動(dòng)態(tài)代理無(wú)須重啟項(xiàng)目解決方案來(lái)提高我們的開(kāi)發(fā)項(xiàng)目,以此為背景,萌生出了以下方案。

2.技術(shù)方案

2.1 舊的配置方案

我們?cè)?code>vue.config.js中常用的代理方案如下:

const port = process.env.port || process.env.npm_config_port || 80 // 端口
module.exports = {
  lintOnSave: false,
  devServer: {
    host: '0.0.0.0',
    port,
    open: false,
    proxy: {
      '/my-api': {
        target: 'https://www.baidu.com',
        ws: false,
        changeOrigin: true,
      }
    }
  }
}

在啟動(dòng)項(xiàng)目的時(shí)候,只會(huì)讀取一次配置文件,當(dāng)再次修改target地址時(shí),vue-cli是無(wú)法感知文件的變化,所以代理的還是舊的地址,所以我們需要重新啟動(dòng)項(xiàng)目來(lái)使配置生效。有沒(méi)有一種方案,可以在修改配置的時(shí)候能使vue-cli感知到文件的變化,從而讀取新的配置呢?方案入下:

2.2 新的配置方案思路

vue-cli 的代理是使用的http-proxy-middleware包,所以proxy選項(xiàng)的配置也是基于這個(gè)包的配置。在proxy配置選項(xiàng)中有兩個(gè)屬性target以及router。其中target是默認(rèn)的代理地址。而router可以return一個(gè)字符串服務(wù)地址,那么當(dāng)兩個(gè)選項(xiàng)都配置了時(shí),http-proxy-middleware在解析配置時(shí),會(huì)首先使用router函數(shù)的返回值,當(dāng)router的返回值不可以用時(shí),那么就會(huì)fallback至target。

http-proxy-middleware router配置源碼

配置校驗(yàn)源碼

我們可以使用proxyrouter來(lái)讀取我們的代理配置文件,這樣就可以實(shí)現(xiàn)修改代理配置文件來(lái)更新代理地址,無(wú)須啟動(dòng)項(xiàng)目。

3. 配置

vue.config.js中加入如下配置:

// vue.config.js
const dynamicProxy = require('./environments/proxy.js')
const port = process.env.port || process.env.npm_config_port || 80 // 端口
module.exports = {
  lintOnSave: false,
  devServer: {
    host: '0.0.0.0',
    port,
    open: false,
    proxy: dynamicProxy.proxy,
    disableHostCheck: true
  },
}

新建environments文件夾,同時(shí)在里面新建proxy.js文件

// proxy.js
const fs = require('fs')
const path = require('path')
const encoding = 'utf-8'
/**
 * 獲取配置文件內(nèi)容 getContent('proxy-config.json')
 * @param filename env.json
 * @returns {string}
 */
const getContent = filename => {
  const dir = path.resolve(process.cwd(), 'environments')
  return fs.readFileSync(path.resolve(dir, filename), { encoding })
}
const jsonParse = obj => {
  return Function('"use strict";return (' + obj + ')')()
}
/**
 * 獲取配置選項(xiàng) getConfig()
 * @returns {{}|*}
 */
const getConfig = () => {
  try {
    return jsonParse(getContent('proxy-config.json'))
  } catch (e) {
    return {}
  }
}
module.exports = {
  proxy: {
  	// 接口匹配規(guī)則自行修改
    ['/my-api']: {
      target: 'that must have a empty placeholder', // 這里必須要有字符串來(lái)進(jìn)行占位
      changeOrigin: true,
      router: () => (getConfig() || {}).target || ''
    }
  }
}

proxy.js最后導(dǎo)出一個(gè)對(duì)象,這個(gè)對(duì)象跟我們以前使用的舊代理方案很像,但是多了一個(gè)router配置,router函數(shù)返回執(zhí)行getConfig函數(shù)讀取配置文件的內(nèi)容,也就是我們的代理地址。

environments目錄下新建我們的代理配置文件proxy-config.json

{
    "target": "https://www.baidu.com"
}

當(dāng)項(xiàng)目啟動(dòng)后,會(huì)讀取我們的代理配置文件。我們?cè)陧?xiàng)目啟動(dòng)后,手動(dòng)修改代理配置文件的代理地址,然后刷新頁(yè)面,就可以使我們的新代理地址生效。

示例demo

github.com/atdow/vue-d…

以上就是vue動(dòng)態(tài)代理無(wú)須重啟項(xiàng)目解決方案詳解的詳細(xì)內(nèi)容,更多關(guān)于vue 動(dòng)態(tài)代理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于Vue-cli快速搭建項(xiàng)目的完整步驟

    基于Vue-cli快速搭建項(xiàng)目的完整步驟

    這篇文章主要給大家介紹了關(guān)于如何基于Vue-cli快速搭建項(xiàng)目的完整步驟,文中通過(guò)示例代碼以及圖片將搭建的步驟一步步介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • vue.config.js配置報(bào)錯(cuò)解決辦法(可能是與webpack混淆)

    vue.config.js配置報(bào)錯(cuò)解決辦法(可能是與webpack混淆)

    在Vue.js開(kāi)發(fā)過(guò)程中,vue.config.js文件是用于配置項(xiàng)目的,特別是對(duì)于開(kāi)發(fā)環(huán)境的設(shè)置,這篇文章主要給大家介紹了關(guān)于vue.config.js配置報(bào)錯(cuò)解決的相關(guān)資料,可能是與webpack混淆,需要的朋友可以參考下
    2024-06-06
  • VUE實(shí)現(xiàn)表單元素雙向綁定(總結(jié))

    VUE實(shí)現(xiàn)表單元素雙向綁定(總結(jié))

    本篇文章主要介紹了VUE實(shí)現(xiàn)表單元素雙向綁定(總結(jié)) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • vue 如何將二維數(shù)組轉(zhuǎn)化為一維數(shù)組

    vue 如何將二維數(shù)組轉(zhuǎn)化為一維數(shù)組

    這篇文章主要介紹了vue 如何將二維數(shù)組轉(zhuǎn)化為一維數(shù)組,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue中進(jìn)行路由懶加載的示例詳解

    Vue中進(jìn)行路由懶加載的示例詳解

    路由懶加載是一種優(yōu)化Vue應(yīng)用程序性能的技術(shù),本文介紹了Vue中如何進(jìn)行路由懶加載,包括使用Vue異步組件和Webpack代碼分割,需要的朋友可以參考下
    2023-06-06
  • Vue3中使用混入(Mixin)的示例詳解

    Vue3中使用混入(Mixin)的示例詳解

    混入(Mixin)是?Vue?中一種代碼復(fù)用的模式,允許將組件的選項(xiàng)抽離為獨(dú)立模塊,下面就跟隨小編一起來(lái)深入了解下如何在Vue3中使用混入Mixin吧
    2025-03-03
  • 基于vue-cli搭建多模塊且各模塊獨(dú)立打包的項(xiàng)目

    基于vue-cli搭建多模塊且各模塊獨(dú)立打包的項(xiàng)目

    這篇文章主要介紹了基于vue-cli搭建多模塊且各模塊獨(dú)立打包的項(xiàng)目,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • vue如何設(shè)置動(dòng)態(tài)的柵格占位、水平偏移量、類名、樣式

    vue如何設(shè)置動(dòng)態(tài)的柵格占位、水平偏移量、類名、樣式

    這篇文章主要介紹了vue如何設(shè)置動(dòng)態(tài)的柵格占位、水平偏移量、類名、樣式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue報(bào)錯(cuò)error:0308010C:digital?envelope?routines::unsupported的解決方法

    Vue報(bào)錯(cuò)error:0308010C:digital?envelope?routines::unsupported

    這篇文章主要給大家介紹了關(guān)于Vue報(bào)錯(cuò)error:0308010C:digital?envelope?routines::unsupported的解決方法,文中通過(guò)圖文將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • vue使用keep-alive無(wú)效以及include和exclude用法解讀

    vue使用keep-alive無(wú)效以及include和exclude用法解讀

    這篇文章主要介紹了vue使用keep-alive無(wú)效以及include和exclude用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論

镇原县| 合水县| 嵩明县| 木兰县| 新乐市| 文成县| 东山县| 濉溪县| 大英县| 雅安市| 红河县| 旬邑县| 城口县| 青海省| 巫山县| 武冈市| 益阳市| 丽水市| 两当县| 梓潼县| 涞源县| 新平| 海南省| 泾阳县| 安岳县| 南川市| 锡林郭勒盟| 古蔺县| 花垣县| 高青县| 贵溪市| 松潘县| 乐都县| 淮北市| 喜德县| 搜索| 芮城县| 黔西县| 丁青县| 丹巴县| 玉林市|