摘要:實(shí)際的做法是按照功能模塊劃分成多個(gè)單頁(yè)應(yīng)用,每個(gè)單頁(yè)應(yīng)用生成一個(gè)文件。隨著業(yè)務(wù)的發(fā)展,后面可能會(huì)不斷的加入新的單頁(yè)應(yīng)用,但是每次新加入單頁(yè)應(yīng)用不能去改動(dòng)構(gòu)建相關(guān)的代碼。并且分別為每個(gè)單頁(yè)應(yīng)用生成一個(gè)配置和配置。
在實(shí)際應(yīng)用中一個(gè)完整的系統(tǒng)不會(huì)把所有的功能都做到一個(gè)網(wǎng)頁(yè)中,因?yàn)檫@會(huì)導(dǎo)致網(wǎng)頁(yè)性能不佳。實(shí)際的做法是按照功能模塊劃分成多個(gè)單頁(yè)應(yīng)用,每個(gè)單頁(yè)應(yīng)用生成一個(gè)HTML文件。之前我們解決了自動(dòng)化生成HTML文件,接下來(lái)繼續(xù)改造上一節(jié)的例子:
項(xiàng)目目前共有兩個(gè)單頁(yè)應(yīng)用組成,一個(gè)是主頁(yè)index.html, 一個(gè)是login.hml
多個(gè)單頁(yè)應(yīng)用之間會(huì)有公共代碼部分,需要將這些公共代碼部分抽離出來(lái)放到多帶帶的文件中防止重復(fù)加載。
隨著業(yè)務(wù)的發(fā)展,后面可能會(huì)不斷的加入新的單頁(yè)應(yīng)用,但是每次新加入單頁(yè)應(yīng)用不能去改動(dòng)構(gòu)建相關(guān)的代碼。
按照上節(jié)的思路,可能要為每個(gè)單頁(yè)應(yīng)用配置一段如下代碼:
new WebPlugin({ template: "./template.html", //HTML模板文件所在的文件路徑 file: "login.html" //輸出的HTML的文件名稱(chēng) })
并且把頁(yè)面對(duì)應(yīng)的入口加入到entry配置項(xiàng)中,就像這樣:
entry: { index: "./page/index/index.js", //頁(yè)面index.html的入口文件 login: "./page/login/index.js", //頁(yè)面login.html的入口文件 }
當(dāng)有新頁(yè)面加入時(shí)就需要修改webpack配置文件,新插入一段以上代碼,這會(huì)導(dǎo)致構(gòu)建代碼難以維護(hù)并且易錯(cuò)。
解決方案上一節(jié)中的web-webpack-plugin插件也內(nèi)置了這個(gè)解決辦法,上一節(jié)只用了他的webPlugin,這節(jié)將使用它的AutoWebPlugin來(lái)解決以上問(wèn)題。
項(xiàng)目源碼結(jié)構(gòu)如下:
├── pages │ ├── index │ │ ├── index.css // 該頁(yè)面多帶帶需要的 CSS 樣式 │ │ └── index.js // 該頁(yè)面的入口文件 │ └── login │ ├── index.css │ └── index.js ├── common.css // 所有頁(yè)面都需要的公共 CSS 樣式 ├── google_analytics.js ├── template.html └── webpack.config.js
從目錄結(jié)構(gòu)中可以看出以下幾點(diǎn)要求:
所有單頁(yè)應(yīng)用的代碼都需要放到一個(gè)目錄下:例如pages目錄下;
一個(gè)單頁(yè)應(yīng)用一個(gè)多帶帶的文件夾,例如最后勝出index.html相關(guān)的代碼都在index目錄下
每個(gè)單頁(yè)應(yīng)用的目錄下都有一個(gè)index.js文件作為入口執(zhí)行文件。
雖然 AutoWebPlugin 強(qiáng)制性的規(guī)定了項(xiàng)目部分的目錄結(jié)構(gòu),但從實(shí)戰(zhàn)經(jīng)驗(yàn)來(lái)看這是一種優(yōu)雅的目錄規(guī)范,合理的拆分了代碼,又能讓新人快速的看懂項(xiàng)目結(jié)構(gòu),也方便日后的維護(hù)。
webpack配置文件修改如下:
const { AutoWebPlugin } = require("web-webpack-plugin") // 使用本文的主角 AutoWebPlugin,自動(dòng)尋找 pages 目錄下的所有目錄,把每一個(gè)目錄看成一個(gè)單頁(yè)應(yīng)用 const autoWebPlugin = new AutoWebPlugin("pages", { template: "./template.html", // HTML 模版文件所在的文件路徑 postEntrys: ["./common.css"],// 所有頁(yè)面都依賴(lài)這份通用的 CSS 樣式文件 // 提取出所有頁(yè)面公共的代碼 commonsChunk: { name: "common",// 提取出公共代碼 Chunk 的名稱(chēng) }, }); module.exports = { // AutoWebPlugin 會(huì)為尋找到的所有單頁(yè)應(yīng)用,生成對(duì)應(yīng)的入口配置, // autoWebPlugin.entry 方法可以獲取到所有由 autoWebPlugin 生成的入口配置 entry: autoWebPlugin.entry({ // 這里可以加入你額外需要的 Chunk 入口 }), plugins: [ autoWebPlugin, ], };
AutoWebPlugin會(huì)找出pages目錄下的2個(gè)文件夾index和login,把這兩個(gè)文件夾看成兩個(gè)單頁(yè)應(yīng)用。并且分別為每個(gè)單頁(yè)應(yīng)用生成一個(gè)Chunk配置和WebPlugin配置。每個(gè)單頁(yè)應(yīng)用的Chunk名稱(chēng)就等于文件夾的名稱(chēng),也就是說(shuō)autoWebPlugin.entry()方法返回的內(nèi)容其實(shí)是:
{ "index":["./pages/index/index.js","./common.css"], "login":["./pages/login/index.js","./common.css"] }
但這些事情 AutoWebPlugin 都會(huì)自動(dòng)為你完成,你不用操心,明白大致原理即可。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/93452.html
摘要:就是一個(gè)用于搭建類(lèi)似于網(wǎng)頁(yè)版知乎這種表單項(xiàng)繁多,且內(nèi)容需要根據(jù)用戶(hù)的操作進(jìn)行修改的網(wǎng)頁(yè)版應(yīng)用。單頁(yè)應(yīng)用程序顧名思義,單頁(yè)應(yīng)用一般指的就是一個(gè)頁(yè)面就是應(yīng)用,當(dāng)然也可以是一個(gè)子應(yīng)用,比如說(shuō)知乎的一個(gè)頁(yè)面就可以視為一個(gè)子應(yīng)用。 最近在逛各大網(wǎng)站,論壇,以及像SegmentFault等編程問(wèn)答社區(qū),發(fā)現(xiàn)Vue.js異?;鸨貜?fù)性的提問(wèn)和內(nèi)容也很多,樓主自己也趁著這個(gè)大前端的熱潮,著手學(xué)習(xí)了一...
摘要:不過(guò)今天我希望能夠更進(jìn)一步,不僅僅再抱怨現(xiàn)狀,而是從我個(gè)人的角度來(lái)給出一個(gè)逐步深入學(xué)習(xí)生態(tài)圈的方案。最后,我還是想提到下對(duì)于的好的學(xué)習(xí)方法就是回顧參照各種各樣的代碼庫(kù),學(xué)習(xí)人家的用法與實(shí)踐。 本文翻譯自A-Study-Plan-To-Cure-JavaScript-Fatigue。筆者看到里面的幾張配圖著實(shí)漂亮,順手翻譯了一波。本文從屬于筆者的Web Frontend Introduc...
摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒(méi)想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...
摘要:面試如何防騙一份優(yōu)秀的前端開(kāi)發(fā)工程師簡(jiǎn)歷是怎么樣的作為,有哪些一般人我都告訴他,但是他都不聽(tīng)的忠告如何面試前端工程師 更多資源請(qǐng)Star:https://github.com/maidishike... 文章轉(zhuǎn)自:https://github.com/jsfront/mo... 3月份前端資源分享 1. Javascript 使用judge.js做信息判斷 javascript...
平日學(xué)習(xí)接觸過(guò)的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個(gè)網(wǎng)址:http://www.kancloud.cn/jsfron... 03月份前端資源分享 1. Javascript 175453545 Redux compose and middleware 源碼分析 深入 Promise(二)——進(jìn)擊的 Promise Effective JavaScript leeheys blog -...
閱讀 3672·2023-04-26 01:43
閱讀 3043·2021-10-14 09:42
閱讀 5722·2021-09-30 09:59
閱讀 2228·2021-09-04 16:40
閱讀 1274·2019-08-30 15:52
閱讀 893·2019-08-29 17:09
閱讀 2099·2019-08-26 13:37
閱讀 3591·2019-08-26 10:20