基于vue-cli單頁面腳手架改造的多頁面項目

了解了Vue一般都會去用Vue-cli入門,這是一個構(gòu)建SPA的腳手架,查看其build的項目,可以看到它是將所有的模塊都輸出到一個build.js中,有時候會看到這個js文件特別大松忍,有好幾兆,然而當一個項目足夠復雜時筷厘,SPA恐怕不再適合使用了鸣峭,用戶不可能訪問你的網(wǎng)頁的時候一下子下載一個幾兆的文件,特別對于手機用戶酥艳,可能用戶只看了網(wǎng)站中的一篇文章摊溶,這也會導致網(wǎng)頁加載慢,這是不可取的充石。所以應(yīng)該將網(wǎng)站劃分成若干模塊莫换。于是就有了本demo(一個用于構(gòu)建多頁面的腳手架)

如何開始?

假設(shè)你已經(jīng)熟悉了vue-cli了??

  1. 創(chuàng)建項目

    vue init webpack vue-multi-page
    # 為了簡便可以不用jslint等
    
  2. 開始改造

    最主要的一步骤铃,將webpack進行改造以滿足對多頁面需求的支持拉岁,其實多頁面,即是webpack有多個入口惰爬。在此步中喊暖,我們主要的操作的對象是 build文件夾下的js文件。

    • 首先撕瞧,我們對 utils.js進行改造
      添加一個方法:getEntries陵叽,方法中需要使用到node的globa模塊,所以需要引入

      // glob模塊风范,用于讀取webpack入口目錄文件
      

var glob = require('glob');

        
        ```javascript
        exports.getEntries = function (globPath) {
  var entries = {}
  /**
   * 讀取src目錄,并進行路徑裁剪
   */
  glob.sync(globPath).forEach(function (entry) {
    /**
     * path.basename 提取出用 ‘/' 隔開的path的最后一部分,除第一個參數(shù)外其余是需要過濾的字符串
     * path.extname 獲取文件后綴
     */
    var basename = path.basename(entry, path.extname(entry), 'router.js') // 過濾router.js
    // ***************begin***************
    // 當然沪么, 你也可以加上模塊名稱, 即輸出如下: { module/main: './src/module/index/main.js', module/test: './src/module/test/test.js' }
    // 最終編譯輸出的文件也在module目錄下硼婿, 訪問路徑需要時 localhost:8080/module/index.html
    // slice 從已有的數(shù)組中返回選定的元素, -3 倒序選擇,即選擇最后三個
    // var tmp = entry.split('/').splice(-3)
    // var pathname = tmp.splice(0, 1) + '/' + basename; // splice(0, 1)取tmp數(shù)組中第一個元素
    // console.log(pathname)
    // entries[pathname] = entry
    // ***************end***************
    entries[basename] = entry
  });
  // console.log(entries);
  // 獲取的主入口如下: { main: './src/module/index/main.js', test: './src/module/test/test.js' }
  return entries;
}
        ```
    + 其次禽车,對webpack.base.conf.js進行改造
        
        刪除 ~~entry: {app: './src/main.js'},~~寇漫,取而代之如下:

        ```javascript
        module.exports = {
            ···
            entry: utils.getEntries('./src/module/**/*.js'),
        ```
    + 最后改造webpack.dev.conf.js和webpack.prod.conf.js
        
        移除原來的HtmlWebpackPlugin
        
        ```javascript
        var pages = utils.getEntries('./src/module/**/*.html')
for(var page in pages) {
  // 配置生成的html文件,定義路徑等
  var conf = {
    filename: page + '.html',
    template: pages[page], //模板路徑
    inject: true,
    // excludeChunks 允許跳過某些chunks, 而chunks告訴插件要引用entry里面的哪幾個入口
    // 如何更好的理解這塊呢殉摔?舉個例子:比如本demo中包含兩個模塊(index和about)州胳,最好的當然是各個模塊引入自己所需的js,
    // 而不是每個頁面都引入所有的js逸月,你可以把下面這個excludeChunks去掉栓撞,然后npm run build,然后看編譯出來的index.html和about.html就知道了
    // filter:將數(shù)據(jù)過濾,然后返回符合要求的數(shù)據(jù)瓤湘,Object.keys是獲取JSON對象中的每個key
    excludeChunks: Object.keys(pages).filter(item => {
      return (item != page)
    })
  }
  // 需要生成幾個html文件瓢颅,就配置幾個HtmlWebpackPlugin對象
  module.exports.plugins.push(new HtmlWebpackPlugin(conf))
}
        ```
        
## 構(gòu)建步驟

        ``` bash
        # 安裝依賴
        npm install
        # 本地測試
        npm run dev
        # 打包
        npm run build
        
        ```
在本地調(diào)試啟動后訪問:[index](http://localhost:8080) | [about](http://localhost:8080/about.html) 即可

## 源碼
[我的github](https://github.com/jarvan4dev/vue-multi-page)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市弛说,隨后出現(xiàn)的幾起案子挽懦,更是在濱河造成了極大的恐慌,老刑警劉巖木人,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件信柿,死亡現(xiàn)場離奇詭異,居然都是意外死亡醒第,警方通過查閱死者的電腦和手機渔嚷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淘讥,“玉大人圃伶,你說我怎么就攤上這事∑蚜校” “怎么了窒朋?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝗岖。 經(jīng)常有香客問我侥猩,道長,這世上最難降的妖魔是什么抵赢? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任欺劳,我火速辦了婚禮,結(jié)果婚禮上铅鲤,老公的妹妹穿的比我還像新娘划提。我一直安慰自己,他們只是感情好邢享,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布鹏往。 她就那樣靜靜地躺著,像睡著了一般骇塘。 火紅的嫁衣襯著肌膚如雪伊履。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天款违,我揣著相機與錄音唐瀑,去河邊找鬼。 笑死插爹,一個胖子當著我的面吹牛哄辣,可吹牛的內(nèi)容都是我干的请梢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼柔滔,長吁一口氣:“原來是場噩夢啊……” “哼溢陪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起睛廊,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤形真,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后超全,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咆霜,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年嘶朱,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛾坯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡疏遏,死狀恐怖脉课,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情财异,我是刑警寧澤倘零,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站戳寸,受9級特大地震影響呈驶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疫鹊,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一袖瞻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拆吆,春花似錦聋迎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奕枢,卻和暖如春娄昆,著一層夾襖步出監(jiān)牢的瞬間佩微,已是汗流浹背缝彬。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哺眯,地道東北人谷浅。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親一疯。 傳聞我的和親對象是個殘疾皇子撼玄,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

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

  • webpack 介紹 webpack 是什么 為什么引入新的打包工具 webpack 核心思想 webpack 安...
    yxsGert閱讀 6,470評論 2 71
  • 在現(xiàn)在的前端開發(fā)中,前后端分離墩邀、模塊化開發(fā)掌猛、版本控制、文件合并與壓縮眉睹、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,443評論 1 32
  • 原文http://www.cnblogs.com/libin-1/p/6596810.html 版本號 vue-c...
    tengrl閱讀 3,653評論 0 0
  • GitChat技術(shù)雜談 前言 本文較長荔茬,為了節(jié)省你的閱讀時間,在文前列寫作思路如下: 什么是 webpack竹海,它要...
    蕭玄辭閱讀 12,697評論 7 110
  • 為什么自控力存在局限严里? 有人曾經(jīng)做過這樣一個實驗捷绑,他在每一個任務(wù)前后分別測量人們的血糖含量,被測試者完成任務(wù)后血糖...
    刺猬門房閱讀 343評論 2 1