基于 Webpack4 + Vue 的多頁應用解決方案(二)

本項目 GitHub 倉庫地址:https://github.com/charleylla/charley-vue-multi

上篇文章 主要介紹了 Webpack 的配置部分,這篇文章主要介紹項目中的模塊劃分,內(nèi)容不多扫步,一會就能看完。

文件結構

首先看一下 src 目錄的文件結構:

├─assets
│  ├─image
│  ├─lib
│  └─style
│          atom.scss
│          constant.scss
│          func.scss
│          main.scss
│
├─component
│  └─test
│          index.js
│          style.scss
│          template.vue
│
├─model
│      index.js
│
├─page
│  ├─home
│  │      index.js
│  │      style.scss
│  │      template.vue
│  │
│  └─index
│          index.js
│          style.scss
│          template.vue
│
├─shared
│      api.js
│      constant.js
│
└─util
        index.js
        request.js

下面對這些目錄進行介紹氓皱。

assets 目錄

assets 目錄用來提供公用的樣式文件,圖片及第三方庫等贮懈。
這里主要看下 style 目錄,style 目錄中有三個文件:

  • atom.scss
  • constant.scss
  • func.scss
  • main.scss

其中 atom.scss 用來定義 ATOM CSS 規(guī)則优训,constant.scss 中定義常用的變量至朵你,func.scss 用來提供常用函數(shù)和 Minxins,main.scss 用來對前面的幾個文件進行整合揣非。main.scss 的內(nèi)容如下:

@import "./constant.scss";
@import "./func.scss";
@import "./atom.scss";

component 目錄

該目錄中定義了項目中需要用到的組件抡医,component 目錄下的每個子目錄表示一個組件,每個組件由 index.js早敬,style.scss 和 template.vue 組成忌傻。
其中,template.vue 用來定義組件搞监,通過 index.js 將組件暴露出去水孩,style.scss 用來定義組件中的樣式。

page 目錄

page 中存放頁面琐驴,每個頁面都是 page 目錄中的一個子目錄俘种,文件的劃分和 component 下的組件保持一致。區(qū)別在于 index.js 文件绝淡,對于頁面級組件宙刘,需要將其掛載到根節(jié)點上。

import Vue from "vue";
import Tpl from "./template.vue";

new Vue({
  render:h => h(Tpl),
}).$mount("#app");

model 目錄

該目錄用來定義每個頁面的數(shù)據(jù)獲取牢酵,如果頁面中需要和后臺進行交互悬包,就在 model 中創(chuàng)建一個文件,文件就以頁面的名字命名馍乙。
下面是 model 目錄下 index.js 的內(nèi)容:

import { testUrl } from "@shared/api";

export const getFetchTest = async () => {
  const res = await new Promise(res => {
    setTimeout(() => {
      res(testUrl);
    },2000);
  });
  return res;
};

當然布近,對于前后端交互的內(nèi)容垫释,也可以放在組件中,但如果頁面上的交互過多時吊输,容易引起組件文件的臃腫饶号,不易維護。因此我推薦將每個頁面的數(shù)據(jù)獲取統(tǒng)一放在 model 下統(tǒng)一管理季蚂,當需要修改數(shù)據(jù)獲取方式時茫船,不用修改組件文件,直接調(diào)整 model 中文件的內(nèi)容即可扭屁。

uitl 目錄

util 目錄中用來提供項目中的公共方法算谈,以 request.js 為例,該文件中將 Axios 的請求方法進行了封裝:

import axios from "axios";

axios.defaults.baseURL = window.env === "prod" ? window.prodBaseUrl : window.devBaseUrl;
axios.defaults.timeout = 120000;

export const getFetch = async (url,params = {}) => {
  try{
    const res = await axios.get(url,params);
    return res;
  }catch(e){
    return {
      code:-1,
      message:e.message,
      status:false,
    };
  }
};

export const postFetch = async (url,params = {}) => {
  try{
    const res = await axios.post(url,params);
    return res;
  }catch(e){
    return {
      code:-1,
      message:e.message,
      status:false,
    };
  }
};

shared 目錄

該目錄中定義了項目中公用的配置料滥,如接口地址然眼,常量等。

區(qū)分測試環(huán)境和正式環(huán)境

一般開發(fā)都會有一個測試環(huán)境和正式環(huán)境葵腹,測試環(huán)境用來在內(nèi)部提供測試高每,正式環(huán)境用來提供給用戶使用,正式環(huán)境和測試環(huán)境具有不同的接口地址践宴。
我們可以將正式環(huán)境和測試環(huán)境的接口地址分別寫在 shared 下的某個文件中鲸匿,將其和 Node 的環(huán)境變量進行綁定,構建時傳入不同的環(huán)境變量阻肩,根據(jù)環(huán)境變量在 util/request.js 中設置 Axios 的 BaseURL带欢。
但通過這樣的方式有一點問題:發(fā)布測試環(huán)境或正式環(huán)境時都需要重新打包,而這個打包僅僅是為了修改一下基礎的接口地址烤惊,很不劃算乔煞。
因此,我在根目錄的 template 目錄下定義了一個 config.js 文件柒室,打包時直接通過 copy-webpack-plugin 將該文件復制到 dist 目錄渡贾,同時在 template/index.html 文件中引用 config.js。這樣一來雄右,如果想修改基礎的接口地址剥啤,只需要在 dist 目錄下的 config.js 中,設置 window.env 即可不脯,無需重復打包府怯。

本項目 GitHub 倉庫地址為:https://github.com/charleylla/charley-vue-multi,如果您覺得我的文章對您有幫助防楷,歡迎幫我點個 Star牺丙,如果您有問題,歡迎提 Issue~

完。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冲簿,一起剝皮案震驚了整個濱河市粟判,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌峦剔,老刑警劉巖档礁,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吝沫,居然都是意外死亡呻澜,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門惨险,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羹幸,“玉大人,你說我怎么就攤上這事辫愉≌な埽” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵恭朗,是天一觀的道長屏镊。 經(jīng)常有香客問我,道長痰腮,這世上最難降的妖魔是什么而芥? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮诽嘉,結果婚禮上蔚出,老公的妹妹穿的比我還像新娘弟翘。我一直安慰自己虫腋,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布稀余。 她就那樣靜靜地躺著悦冀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪睛琳。 梳的紋絲不亂的頭發(fā)上盒蟆,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音师骗,去河邊找鬼历等。 笑死,一個胖子當著我的面吹牛辟癌,可吹牛的內(nèi)容都是我干的寒屯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寡夹!你這毒婦竟也來了处面?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤菩掏,失蹤者是張志新(化名)和其女友劉穎魂角,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體智绸,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡野揪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了传于。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囱挑。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖沼溜,靈堂內(nèi)的尸體忽然破棺而出平挑,到底是詐尸還是另有隱情,我是刑警寧澤系草,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布通熄,位于F島的核電站,受9級特大地震影響找都,放射性物質(zhì)發(fā)生泄漏唇辨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一能耻、第九天 我趴在偏房一處隱蔽的房頂上張望赏枚。 院中可真熱鬧,春花似錦晓猛、人聲如沸饿幅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栗恩。三九已至,卻和暖如春洪燥,著一層夾襖步出監(jiān)牢的瞬間磕秤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工捧韵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留市咆,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓再来,卻偏偏與公主長得像蒙兰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容