webpack4+vue2+axios+vue-router的多頁+單頁混合應用框架

来源:https://www.cnblogs.com/liaojunbo/archive/2018/09/06/9597099.html
-Advertisement-
Play Games

VUE2的單頁應用框架有人分享了,多頁應用框架也有人分享了,這裡分享一個單頁+多頁的混合應用框架吧,node.js寫了一個簡單的mock服務,也集成在裡面,整體初現雛形,還有很多需要優化和改善的地方。。。 ...


VUE2的單頁應用框架有人分享了,多頁應用框架也有人分享了,這裡就分享一個單頁和多頁的混合應用框架吧,初現雛形,還有很多需要優化和改善的地方。。。

結尾有github地址。

項目結構

│
├─build                             /* webpack的配置目錄 */
│     ├─config.js                   /* 公共常量,用於配置文件 */
│     ├─utils.js                    /* 工具函數,用於配置文件 */
│     ├─webpack.base.conf.js        /* 公共配置文件 */
│     ├─webpack.dev.conf.js         /* 開發環境配置文件 */
│     └─webpack.prod.conf.js        /* 生產環境配置文件 */
│
├──mock                             /* mock服務和mock數據 */
│    ├─api                          /* 存放mock數據 */
│    └─mock-server.js               /* mock服務 */
│
├──src                              /* 項目源碼 */
│    │
│    ├─api                          /* 所有後端介面 */
│    │  ├──index.js
│    │  └──product.js
│    │
│    ├─assets                       /* 公共的靜態文件 */
│    │  ├─fonts
│    │  ├─img
│    │  └─style
│    │
│    ├─utils                        /* 業務無關的工具函數 */
│    │
│    ├─common                       /* 業務相關的公共函數 */
│    │      config.js
│    │      http.js
│    │
│    ├─components                   /* 公共組件, 如Dialog、Loading等 */
│    │  └─navbar
│    │
│    ├─pages                        /*  頁面
│    │  │
│    │  ├─index/                        每個頁面一個文件夾,當前頁面的樣式、圖片、子組件都存放在自已的文件夾下。
│    │  │                               為了項目結構清晰,一級目錄以模塊劃分,二級目錄則為頁面目錄。
│    │  ├─my/                       */
│    │  │  └─order/
│    │  │
│    │  ├─product/
│    │  │   └─list/
│    │  │
│    │  ├─App.vue                   /* 多頁應用的公共入口頁面 */
│    │  │
│    │  └─main.js                   /* 多頁應用的公共入口函數 */
│    │
│    ├─router                       /* 路由配置 */
│    │      router.js
│    │
│    └─store                        /* 狀態管理 */
│       │  actions.js
│       │  getters.js
│       │  index.js
│       │  mutation-types.js
│       │  mutations.js
│       │
│       └─modules
│
├─── .babelrc                       /* babel配置 */
├─── .editorconfig                  /* 開發工具配置 */
├─── index.html                     /* 公共模板文件 */
├─── package.json                   /* 包描述文件 */
└─── postcss.config.js              /* postcss相關插件配置 */

項目簡介

一個集 多頁應用 + 單頁應用 的混合項目框架。

適用於主要入口頁面生成多頁,子頁面和次要頁面使用單頁形式的項目。

技術棧

 

項目打包說明

  • npm模塊(vue、vuex之類)打包成一個單獨的js文件
  • 公共組件和公共函數打包成一個單獨的js文件
  • 單頁和多頁,都按頁面打包,即每個頁面組件都打包成單獨的js文件,按需載入
  • 公共樣式和各頁面樣式均各自打包成單獨的css文件

如何配置多頁?

"多頁面"根據添加一個簡單的入口文件(entry.js)即可自動生成html頁面。

打包時,自動遍歷"/src/pages/"目錄,查找所有目錄下的"entry.js"文件,

每個"entry.js"文件都作為一個單獨的打包入口,每個入口生成單獨的.html文件

多入口配置

在需要生成單獨html頁面的目錄下新建一個entry.js文件,並引入一個公共的入口js文件 /src/pages/main.js

給公共入口函數傳遞一個當前html頁面預設要展示的頁面組件。

入口示例

entry.js 入口文件,只需要修改要載入的頁面組件即可,比如此例中的 ./list.vue

//導入公共入口文件 (必須)
import main from '@/pages/main'

//預設載入的頁面組件 (必須)
import List from './list.vue'

//傳遞一個要展示的頁面組件給公共入口函數 (必須)
main.init(List)

 

html模板

一個打包入口對應一個html模板。

所有頁面預設使用項目根目錄下的 /index.html 作為模板。

如果某個頁面需要單獨的html模板,可在其目錄下新建名為 entry.html 的文件,打包時會自動將其識別為當前頁面的模板。

註:只有在有入口文件(entry.js)的目錄下添加單獨的html模板,才有效。

 

單頁配置

根據 vue-router 插件的路由配置 (./router/router.js) 來生成單頁js文件。

每個html頁面都是共用的同一個路由配置 (router.js文件) ,因此單頁的頁面組件可渲染在任意一個html中。

 

插件說明

此示例中沒有使用 Generator函數async/await,所以排除了對應的babel插件,打包文件也小了20幾Kb,

如果你需要它們,可以在 .babelrc 文件中去掉排除項。

所用插件在package.json文件中可查看,具體插件功能及配置可到插件的npm包主頁查看

 

安裝插件

npm install
or
yarn install

開發&打包

執行以下命令預覽非常簡單的demo

//啟動 Web 開發伺服器與 Mock 伺服器
npm start

//構建生產文件
npm run build

 

mock數據服務

概述

  1. 所有mock文件直接放在 ./api 目錄的根目錄下。(不支持子目錄,可自行修改mock-server.js來實現)
  2. mock文件名必須和介面文件名一致,才能將請求介面匹配上mock文件。
  3. mock文件可以是 .js 文件或 .jso 文件,如果對同一介面分別創建了js和json兩個mock文件,會優先取js文件的數據。
  4. json文件用來存放固定的mock數據,而js文件可更加自由的處理並返回mock數據。
  5. 修改api目錄下的mock文件後,無需重啟node服務,重新調用介面會返回新的數據。

啟動mock服務

有兩種方式:

1、執行命令 npm start 啟動當前項目時,會自動啟動mock服務(此為預設方式,在package.json中配置)。

$ npm start

2、手動執行node服務文件 ./mock/mock-server.js

$ node ./mock/mock-server.js

項目中使用mock介面

在配置文件 /build/webpack.dev.conf 中,使用webpack插件 webpack-dev-server 的代理屬性 (proxy) ,將介面伺服器轉發到mock伺服器。

mock伺服器接收到轉發過來的請求後,截取URL請求路徑中的介面名,再用API介面的名字去匹配 ./mock/api 目錄下的mock文件名,
最終返回mock文件中的數據。

mock文件命名規則

mock文件名必須和介面文件名一致

例1:

如果介面為 "/service/user/getUserInfo"

則mock數據文件名為 "getUserInfo.js" 或者 "getUserInfo.json"

例2:

如果介面為 "/service/user/getUserInfo.do"

則mock數據文件名為 "getUserInfo.do.js" 或者 "getUserInfo.do.json"

mock文件編寫規則

API介面名.json 文件只支持json格式的數據,例:

{
  "code": 1,
  "msg": "失敗",
  "data":{
      "age": 520,
      "card": 10099
  },
  "servertime": 1534835882204
}

API介面名.js 文件必須導出一個函數,函數接收兩個參數,需在函數中返回mock數據,例:

/*
    返回mock數據

    @param {object} getData  介面的GET數據
    @param {object} postData 介面的POST數據
 */
module.exports = function(getData, postData) {
  //to do something...

  return {
    code: 0,
    msg: "成功"
    data: {}
  }
}

 

最後,框架源碼地址:https://github.com/ahbool/vue-mix-pages,歡迎 +Star

demo很爛,將就著看吧 !-_-

在使用過程中如果發現有待優化的地方或者好的建議,歡迎提出。。。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 想必各位在寫wap端時都遇到過這樣的場景吧 自定義分享標題、圖片、描述 接下來小編給大家講解下分享相關操作 預期效果 原始的分享效果: 使用微信JS-SDK的分享效果: 可以看出縮略圖,標題,摘要樣式良好,給用戶的體驗很好。 準備工作 微信官方開發者文檔地址:https://mp.weixin ...
  • 背景:由於最近在做項目之餘想做一些其他的事,所以東找找西找找的,最後決定寫一個封裝一些常用原型方法的NPM包,但不僅限於此。話不多說,說一下實踐過程。 一、註冊NPM及如何上傳NPM包參考連接:https://blog.csdn.net/Her_smile/article/details/80519 ...
  • 區分開發模式和生產模式: npm run start——開發模式,啟用devServer,文件的改動實時更新、刷新 npm run build——生產模式,打包文件到dist文件夾 ...
  • 阿裡的模擬筆試題,當時時間有限沒寫出來,其實是因為自己對原生dom操作不熟悉,這裡補一下。 題目的大意是有一個表格,如代碼所示 大概長這樣吧,註意有表頭,然後讓你寫一個函數對錶中的記錄,比如按idx升序排序 思路:就將表中的數據全都取出來,排序之後重新建表。 代碼 要記住的點就是,querySele ...
  • 一、css垂直居中 1.line-height(適用於單行文本居中) eg: html:<p class="wordp">123</p>- css: .wordp{width:100px;line-height:50px;background:yellow;color:#fff} 2.:befor+ ...
  • 對象擴展: 1、Object.is(A,B) :比較兩個值是否相等,取代 運算;只要值相等代表相等;其中NAN和NAN相等;+0和-0不相等; 2、Object.assign(target,source1,source2.......) :合併源對象的所有可枚舉屬性到目標對象;同名屬性後覆蓋前;ju ...
  • html5中如何去掉input type date預設樣式 2.對日期時間控制項的樣式進行修改目前WebKit下有如下9個偽元素可以改變日期控制項的UI:::-webkit-datetime-edit – 控制編輯區域的::-webkit-datetime-edit-fields-wrapper – 控 ...
  • 以前安裝 時總是失敗,然後就在 上下載好相應版本的文件放到用戶目錄來解決問題。 後來研究發現 不僅可以設置 模塊倉庫的代理, 同樣可以設置像 "electron" 、 "phantomjs" 、 "node sass" 等模塊的鏡像代理 <! more 一、設置淘寶鏡像 (共三種方法) 1.環境變數 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...