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

多頁(yè)vue應(yīng)用的單頁(yè)面打包方法(內(nèi)含打包模式的應(yīng)用)

 更新時(shí)間:2020年06月11日 14:40:44   作者:夕山雨  
這篇文章主要介紹了多頁(yè)vue應(yīng)用的單頁(yè)面打包方法(內(nèi)含打包模式的應(yīng)用),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、簡(jiǎn)介

關(guān)于如何以及為什么要構(gòu)建多頁(yè)vue應(yīng)用,我們?cè)谏弦黄恼轮幸呀?jīng)介紹過(guò),感興趣的請(qǐng)參考構(gòu)建多頁(yè)vue應(yīng)用。本文我們要介紹的是,對(duì)于一個(gè)多頁(yè)應(yīng)用,如何單獨(dú)打包其中一個(gè)(或幾個(gè))頁(yè)面。

一般來(lái)說(shuō),多頁(yè)應(yīng)用不需要打包單個(gè)頁(yè)面,這多個(gè)頁(yè)面可以作為整個(gè)應(yīng)用直接放在靜態(tài)資源服務(wù)器上。不過(guò)我們也說(shuō)過(guò),多頁(yè)應(yīng)用的每個(gè)頁(yè)面也可能會(huì)放在不同的服務(wù)器上,這時(shí)候如果往每個(gè)服務(wù)器上都放置完整的資源包,就會(huì)顯得過(guò)于臃腫。于是我們可能就需要將某個(gè)頁(yè)面單獨(dú)打包出來(lái)。

誠(chéng)然,有一個(gè)很明顯的方法,就是在每次打包的時(shí)候直接刪掉vue.config.js的pages字段里不相關(guān)的頁(yè)面,如:

module.exports = {
 pages: {
  page1: {...},
  // page2: {...},
  // page3: {...}
 }
}

顯然,這樣打包出來(lái)的結(jié)果就是只有page1頁(yè)面了。

但是每次打包都刪改配置文件并不是一種很優(yōu)雅的做法。我們需要的方案是有多個(gè)打包命令,執(zhí)行對(duì)應(yīng)的打包命令即可打包對(duì)應(yīng)的頁(yè)面,這樣我們就可以不再改配置文件了。下面我們來(lái)介紹這種方法:

二、實(shí)現(xiàn)過(guò)程

要實(shí)現(xiàn)通過(guò)不同的打包命令來(lái)打包單獨(dú)的頁(yè)面,需要先從打包命令本身說(shuō)起。

1. 配置打包指令(指定打包模式)

我們執(zhí)行的打包命令為npm run build,這個(gè)命令執(zhí)行的是package.json的scripts字段下的build命令,它的原始值如下:

{
 ...
 "scripts": {
  ...
  "build": "vue-cli-service build"
 }
 ...
}

也就是說(shuō),這個(gè)命令實(shí)際上是在調(diào)用vue-cli-service服務(wù)的build命令。

根據(jù)vue-cli的文檔介紹,build命令后面可以跟一個(gè)mode參數(shù),定義打包模式,默認(rèn)的打包模式包括production、development和test三個(gè),它們的行為主要是把全局的process.env.NODE_ENV變量置為對(duì)應(yīng)的值(即production、development和test)。在省略mode參數(shù)的情況下,默認(rèn)值是production,即生產(chǎn)模式。

除了這三個(gè)默認(rèn)模式外,我們還可以自定義打包模式。假如我們想定義一個(gè)專門(mén)打包page1的打包模式,就可以這樣一個(gè)指令:

 "scripts": {
  "build-page1": "vue-cli-service build --mode page1"
 }

我們希望,當(dāng)執(zhí)行npm run build-page1命令時(shí),webpack就會(huì)自動(dòng)把page1打包出來(lái)。

但顯然只修改這里是不夠的,webpack并不知道page1是什么模式,以及它應(yīng)該有哪些行為。接下來(lái)我們需要為page1這個(gè)打包模式定義行為。

2. 定義模式行為

啟用一個(gè)打包模式的本質(zhì)含義,其實(shí)是啟用一組特定的環(huán)境變量。

比如,production模式會(huì)把process.env.NODE_ENV的值置為production,而process.env是webpack所在的node環(huán)境提供的全局變量。這樣,在代碼中,只需要根據(jù)process.env.NODE_ENV的值就可以判斷當(dāng)前處于哪種打包模式了,代碼可以根據(jù)不同的打包模式產(chǎn)生不同的行為。

對(duì)于自定義的打包模式,我們也可以指定一組全局變量,以使代碼產(chǎn)生不同的行為。vue-cli文檔規(guī)定,每個(gè)自定義模式對(duì)應(yīng)的變量應(yīng)該定義在根目錄下的.env.xxx文件內(nèi)。比如我們的打包模式名為page1,那么就需要在項(xiàng)目根目錄下新建一個(gè).env.page1(注意,這里是沒(méi)有后綴的)文件:

當(dāng)指定打包模式為page1時(shí),webpack就會(huì)啟用這個(gè)文件中所定義的變量。文件內(nèi)可以這樣定義變量:
.env.page1

NODE_ENV = 'production'
page = 'page1'

現(xiàn)在,當(dāng)使用打包模式page1時(shí),webpack就會(huì)讀取這個(gè)環(huán)境文件,然后把這里定義的變量逐個(gè)添加到全局對(duì)象process.env上。因此此時(shí)process.env.page的值就是字符串'page1'(NODE_ENV的值默認(rèn)就是production,這里可以省略)。

向全局變量注冊(cè)了變量page之后,我們就可以在程序中根據(jù)它定義打包行為了。

3. 定義打包邏輯

之前我們定義多頁(yè)應(yīng)用的配置時(shí),pages字段配置的是固定的值,也就是定義了三個(gè)打包入口?,F(xiàn)在有了全局變量process.env.page,我們就不需要設(shè)為定值了,而是可以根據(jù)這個(gè)變量的值,動(dòng)態(tài)定義打包入口。此時(shí)vue.config.js可以進(jìn)行如下改造:

function resolvePages(page){
 let page1 = {
  entry: 'src/pages/page1/main.js',
  template: 'public/index.html',
  filename: 'page1.html',
 };
 let page2 = {
  entry: 'src/pages/page2/main.js',
  template: 'public/index.html',
  filename: 'page2.html',
 };
 let page3 = {
  entry: 'src/pages/page3/main.js',
  template: 'public/index.html',
  filename: 'page3.html',
 };
 return page === 'page1' ? { page1 } : 
  { page1, page2, page3 };
}
module.exports = {
 pages: resolvePages(process.env.page),
}

我們現(xiàn)在讀取process.env.page的值進(jìn)行判斷,如果它的值是page1,那么說(shuō)明我們處于page1打包模式下,于是resolvePages函數(shù)返回的對(duì)象僅包括page1這一個(gè)頁(yè)面的入口,否則就返回三個(gè)打包入口,進(jìn)行完整多頁(yè)應(yīng)用的構(gòu)建。

基于這個(gè)原理,我們同樣可以定義page2、page3的打包模式,甚至定義更加復(fù)雜的打包模式(如同時(shí)打包page1和page2),此時(shí)resolvePages函數(shù)的返回值只是稍微復(fù)雜一些:

return page === 'page1' ? { page1 } : 
 page === 'page2' ? { page2 } : 
 page === 'page1,page2' ? { page1, page2 } :
 ...
 { page1, page2, page3 };

現(xiàn)在一切準(zhǔn)備就緒。

我們執(zhí)行npm run build-page1命令時(shí),vue-cli會(huì)先讀取指定的page1模式對(duì)應(yīng)的.env.page1文件,它會(huì)為process.env新增環(huán)境變量page。然后vue-cli會(huì)去讀取vue.config.js配置文件中的pages字段,調(diào)用resolvePages函數(shù),并傳入變量process.env.page,得到打包入口對(duì)象為:{ page1 },由于只有一個(gè)打包入口,因此vue-cli會(huì)調(diào)用webpack的打包服務(wù),對(duì)該頁(yè)面進(jìn)行單獨(dú)構(gòu)建。

有人可能會(huì)問(wèn),難道只有打包時(shí)才能指定mode嗎?其實(shí)不是的,serve命令也有mode參數(shù)。根據(jù)以上過(guò)程,你也可以單獨(dú)啟動(dòng)某一個(gè)頁(yè)面,此時(shí)你只需要定義下面這樣的腳本:

{
 ...
 "scripts": {
  "serve-page1": "vue-cli-service serve --mode page1"
 }
}

與打包過(guò)程沒(méi)有什么差別,這里就不再贅述了。

需要注意的是,public文件夾下的資源是靜態(tài)資源,無(wú)論使用任何打包模式,它們都會(huì)被直接拷貝到dist文件夾下。

三、打包模式的應(yīng)用

打包模式的應(yīng)用不僅在于單頁(yè)打包,我們舉一個(gè)更常見(jiàn)的例子:假設(shè)我們的代碼打包后可能被派發(fā)到多個(gè)項(xiàng)目上,而這些項(xiàng)目之間卻存在一些細(xì)小的差別(比如某個(gè)表格的樣式不同)。如果我們?yōu)槊總€(gè)項(xiàng)目都單獨(dú)創(chuàng)建一份代碼,那么代碼庫(kù)將變得極難維護(hù)。這時(shí)候,打包模式就可以派上用場(chǎng)了。

我們可以為這些項(xiàng)目分別創(chuàng)建單獨(dú)的打包命令,如:

{
 "scripts": {
  "build-project1": "vue-cli-service build --mode project1",
  "build-project2": "vue-cli-service build --mode project2",
 }
}

然后在根目錄下分別為每個(gè)打包模式定義一個(gè)環(huán)境文件:.env.project1,.env.project2。我們?cè)谶@里分別定義一組全局變量:
.env.project1

VUE_APP_PROJECT = 'project1'

.env.project2

VUE_APP_PROJECT = 'project2'

這里需要強(qiáng)調(diào)的是,如果需要在src路徑下的代碼中引用env中的某個(gè)變量,那么這個(gè)變量必須以VUE_APP_開(kāi)頭,否則結(jié)果都會(huì)是undefined(在src之外的代碼中沒(méi)有這個(gè)限制,如上面我們?cè)趘ue.config.js中引用的變量就沒(méi)有遵循這個(gè)約束,當(dāng)然你可以更規(guī)范地對(duì)所有自定義變量添加這個(gè)前綴,以防止出錯(cuò))。

現(xiàn)在,當(dāng)執(zhí)行npm run build-project1時(shí),process.env.VUE_APP_PROJECT的值就是project1,我們可以在代碼中根據(jù)這個(gè)值來(lái)區(qū)分不同的項(xiàng)目。比如在某個(gè)組件中,我們需要對(duì)項(xiàng)目1添加一些額外的邏輯:

methods: {
 doSomething(){
  if(process.env.VUE_APP_PROJECT === 'project1'){
   // 對(duì)project1項(xiàng)目添加額外的邏輯
   ...
  }
 }
}

當(dāng)你運(yùn)行npm run build-project1打包命令時(shí),if語(yǔ)句的內(nèi)容就會(huì)生效,反之,在其他模式下,它不會(huì)生效。同樣的,你也可以配置項(xiàng)目1專屬的啟動(dòng)命令:

"serve-project1": "vue-cli-service serve --mode project1"

你可以運(yùn)行npm run serve-project1來(lái)啟用project1環(huán)境。

總結(jié)

通過(guò)學(xué)習(xí)在多頁(yè)應(yīng)用中打包單個(gè)頁(yè)面,我們學(xué)會(huì)了如何自定義打包模式,這應(yīng)該是本文最重要的知識(shí)點(diǎn)。將打包模式推廣,我們學(xué)會(huì)了如何在一份代碼中添加多個(gè)項(xiàng)目的邏輯,這使得我們維護(hù)多個(gè)項(xiàng)目分支的成本大大降低。打包模式的用途可能還遠(yuǎn)不止這些,希望讀者理解它,并熟練運(yùn)用。

到此這篇關(guān)于多頁(yè)vue應(yīng)用的單頁(yè)面打包方法(內(nèi)含打包模式的應(yīng)用)的文章就介紹到這了,更多相關(guān)多頁(yè)vue應(yīng)用的單頁(yè)面打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue webpack開(kāi)發(fā)訪問(wèn)后臺(tái)接口全局配置的方法

    vue webpack開(kāi)發(fā)訪問(wèn)后臺(tái)接口全局配置的方法

    今天小編就為大家分享一篇vue webpack開(kāi)發(fā)訪問(wèn)后臺(tái)接口全局配置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • vue實(shí)現(xiàn)豎屏滾動(dòng)公告效果

    vue實(shí)現(xiàn)豎屏滾動(dòng)公告效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)豎屏滾動(dòng)公告效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue3+Element?Plus實(shí)現(xiàn)動(dòng)態(tài)標(biāo)簽頁(yè)以及右鍵菜單功能

    Vue3+Element?Plus實(shí)現(xiàn)動(dòng)態(tài)標(biāo)簽頁(yè)以及右鍵菜單功能

    這篇文章主要給大家介紹了關(guān)于Vue3+Element?Plus實(shí)現(xiàn)動(dòng)態(tài)標(biāo)簽頁(yè)以及右鍵菜單功能的相關(guān)資料,Vue?3和Element?Plus提供了一種簡(jiǎn)單的方法來(lái)實(shí)現(xiàn)側(cè)邊菜單欄與標(biāo)簽頁(yè)之間的聯(lián)動(dòng),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • el-table表格點(diǎn)擊該行任意位置時(shí)也勾選上其前面的復(fù)選框

    el-table表格點(diǎn)擊該行任意位置時(shí)也勾選上其前面的復(fù)選框

    本文主要介紹了在el-table組件中實(shí)現(xiàn)雙擊表格某一行任意位置自動(dòng)勾選復(fù)選框的功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Vue封裝svg-icon組件使用教程

    Vue封裝svg-icon組件使用教程

    SVG(Scalable?Vector?Graphics)可縮放矢量圖形,是一種用于描述基于二維的矢量圖形的?XML?標(biāo)記語(yǔ)言,其基本矢量顯示對(duì)象包括矩形、圓、橢圓、多邊形、直線、任意曲線等,還能顯示文字對(duì)象和嵌入式外部圖像
    2023-02-02
  • vue + node如何通過(guò)一個(gè)Txt文件批量生成MP3并壓縮成Zip

    vue + node如何通過(guò)一個(gè)Txt文件批量生成MP3并壓縮成Zip

    這篇文章主要介紹了vue + node如何通過(guò)一個(gè)Txt文件批量生成MP3并壓縮成Zip的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Vue 解決通過(guò)this.$refs來(lái)獲取DOM或者組件報(bào)錯(cuò)問(wèn)題

    Vue 解決通過(guò)this.$refs來(lái)獲取DOM或者組件報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了Vue 解決通過(guò)this.$refs來(lái)獲取DOM或者組件報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • vue組件之間通信方式實(shí)例總結(jié)【8種方式】

    vue組件之間通信方式實(shí)例總結(jié)【8種方式】

    這篇文章主要介紹了vue組件之間通信方式,結(jié)合實(shí)例形式總結(jié)分析了vue.js的8種組件通信方式與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-02-02
  • vue2+elementUI實(shí)現(xiàn)下拉樹(shù)形多選框效果實(shí)例

    vue2+elementUI實(shí)現(xiàn)下拉樹(shù)形多選框效果實(shí)例

    這篇文章主要給大家介紹了關(guān)于vue2+elementUI實(shí)現(xiàn)下拉樹(shù)形多選框效果的相關(guān)資料,這是最近的工作中遇到的一個(gè)需求,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Element Carousel 走馬燈的具體實(shí)現(xiàn)

    Element Carousel 走馬燈的具體實(shí)現(xiàn)

    這篇文章主要介紹了Element Carousel 走馬燈的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論

溧水县| 棋牌| 石台县| 寻乌县| 舞钢市| 洞口县| 阿克苏市| 微山县| 襄城县| 航空| 正镶白旗| 津市市| 无为县| 玛多县| 新泰市| 湖州市| 上蔡县| 台中市| 咸阳市| 西吉县| 游戏| 嘉黎县| 安塞县| 雷州市| 雷州市| 泽普县| 余姚市| 保亭| 调兵山市| 聂拉木县| 新安县| 安阳县| 瑞安市| 常宁市| 建阳市| 南汇区| 平阴县| 葫芦岛市| 微博| 尼木县| 新沂市|