vue如何將單頁面改造成多頁面應(yīng)用

問題描述: 手頭有一個(gè)項(xiàng)目是使用 vue-cli 搭建的單頁面應(yīng)用渣淳。項(xiàng)目分為了管理平臺(tái)和用戶查看頁面各墨,用戶查看頁面是很簡(jiǎn)單的頁面茄猫,但是在加載過程中誊抛,卻加載了整個(gè)應(yīng)用的打包代碼列牺,量重且影響了響應(yīng)和體驗(yàn)。我想要的效果是拗窃,查看頁面只加載查看頁面的代碼瞎领,不包含管理系統(tǒng)的代碼,因此著手將單頁面應(yīng)用改造成多頁面應(yīng)用随夸,這里分享下方法九默。

1、改造文件目錄

改造前:


image.png

改造后:


image
  • assets:這里不變宾毒,依然放置公用的靜態(tài)資源文件驼修;
  • components:這里存放應(yīng)用下所有的vue組件;
  • pages:這里存放我們的多頁面诈铛,比如我把管理系統(tǒng)頁面放在index中乙各,查看頁面放在view中;

pages文件:


image

每個(gè)頁面下必須包含的文件是 html/js/vue幢竹,是文件入口耳峦,如果該頁面下包含路由,狀態(tài)管理焕毫,接口請(qǐng)求也放在該目錄下蹲坷;

2驶乾、打包配置文件修改

我們最后的打包文件是這樣的,可以看到有2個(gè)html冠句,包括資源也分開了轻掩。這是通過修改webpack配置改造的。采用的方法也是網(wǎng)上比較推薦的方法.
HTML分離:

image

資源分離:


image

2.1 修改build->utils.js

修改build文件夾下的utils.js懦底,直接將下面的代碼復(fù)制在后面即可。

var glob = require('glob');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var PAGE_PATH = path.resolve(__dirname, '../src/pages');
var merge = require('webpack-merge');
// 這段代碼的意思是根據(jù)我們`pages`下的文件夾定義webpack的入口:
exports.entries = function () {
  var entryFiles = glob.sync(PAGE_PATH + '/*/*.js')
  var map = {}
  entryFiles.forEach((filePath) => {
      var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
      map[filename] = filePath
  })
  return map
}
// 這段代碼是將生成的html罕扎,加載對(duì)應(yīng)的資源文件
exports.htmlPlugin = function () {
  let entryHtml = glob.sync(PAGE_PATH + '/*/*.html')
  let arr = []
  entryHtml.forEach((filePath) => {
      let filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
      let conf = {
          // 模板來源
          template: filePath,
          // 文件名稱
          filename: filename + '.html',
          // 頁面模板需要加對(duì)應(yīng)的js腳本聚唐,如果不加這行則每個(gè)頁面都會(huì)引入所有的js腳本
          chunks: ['manifest', 'vendor', filename],
          inject: true
      }
      if (process.env.NODE_ENV === 'production') {
          conf = merge(conf, {
              minify: {
                  removeComments: true, 
                  collapseWhitespace: true,
                  removeAttributeQuotes: true
              },
              chunksSortMode: 'dependency'
          })
      }
      arr.push(new HtmlWebpackPlugin(conf))
  })
  return arr
}

2.2 修改入口entry

  • 打開 build->webpack.base.conf.js,替換entry為在utils新增的entries
    image

2.3 修改html插件

  • 打開build->webpack.prod.conf.js,先去除原來的配置:

    image

    然后再把我們剛在utils里新增的配置加上:

    image

3、頁面怎么寫

上面的方法腔召,網(wǎng)上五花八門的都介紹了杆查,但是在實(shí)現(xiàn)的過程中,還是遇到了問題:這里粘貼下我實(shí)踐成功的頁面寫法臀蛛,減少一些爬坑吧~
view.html

image

view.vue

image

view.js

image

ok亲桦,這時(shí)候 npm run build 就可以打包出我們要的文件了,訪問方法是直接輸入對(duì)應(yīng)的html浊仆,如果是管理首頁客峭,無需寫index.html,比如本地訪問查看頁面:

image

4抡柿、進(jìn)一步優(yōu)化

這個(gè)時(shí)候我們又發(fā)現(xiàn)一個(gè)問題舔琅,就是我的查看頁面很簡(jiǎn)單,沒有引入狀態(tài)管理洲劣,路由备蚓,UI框架,但是我們知道vue的webpack把這些第三方公共組件都打包到render.js里面了且文件很大會(huì)影響我們的加載速度囱稽。這里我是將比較大的第三方庫使用了cdn方法加載郊尝,實(shí)踐證明會(huì)減少了一半的加載速度,且壓縮后的js代碼也小了很多了~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末战惊,一起剝皮案震驚了整個(gè)濱河市流昏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌样傍,老刑警劉巖横缔,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異衫哥,居然都是意外死亡茎刚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門撤逢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膛锭,“玉大人粮坞,你說我怎么就攤上這事〕跽” “怎么了莫杈?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)奢入。 經(jīng)常有香客問我筝闹,道長(zhǎng),這世上最難降的妖魔是什么腥光? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任关顷,我火速辦了婚禮,結(jié)果婚禮上武福,老公的妹妹穿的比我還像新娘议双。我一直安慰自己,他們只是感情好捉片,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布平痰。 她就那樣靜靜地躺著,像睡著了一般伍纫。 火紅的嫁衣襯著肌膚如雪宗雇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天翻斟,我揣著相機(jī)與錄音逾礁,去河邊找鬼。 笑死访惜,一個(gè)胖子當(dāng)著我的面吹牛嘹履,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播债热,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼砾嫉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了窒篱?” 一聲冷哼從身側(cè)響起焕刮,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎墙杯,沒想到半個(gè)月后配并,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡高镐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年溉旋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫉髓。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡观腊,死狀恐怖邑闲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情梧油,我是刑警寧澤苫耸,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站儡陨,受9級(jí)特大地震影響褪子,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜迄委,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一褐筛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叙身,春花似錦、人聲如沸硫狞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽残吩。三九已至财忽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泣侮,已是汗流浹背即彪。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留活尊,地道東北人隶校。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蛹锰,于是被迫代替她去往敵國(guó)和親深胳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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