quickpage有趣的多頁面項目架構(gòu)

前言

說起多頁面項目架構(gòu)盟步,大家應(yīng)該不會陌生休玩。我們既希望它能夠多容納多個單獨的Web頁面,又希望它們能夠共用一些工程化配置(例如圖片處理片择,語法檢查等)潜的。利用 webpack 搭建的多頁面項目已經(jīng)成為了前端小白的標配。千千萬萬個面試者的 github 倉庫里面都有 webpack 的多頁面項目腳手架字管,從這里可以看出它在Web前端的重要性啰挪。

但是,webpack多頁面項目架構(gòu)存在著一些難以忍受的缺點纤掸。

  1. 當項目中頁面很多脐供,項目的熱加載速度會受到影響,bundle需要大范圍重新計算借跪。這時候最有效的解決方案就是頁面限制入口政己,但是這種方法給開發(fā)者帶來心智負擔(dān),并非最好的解決方案掏愁。
  2. 多頁面項目只能支持一種前端框架歇由,它沒法同時支持多種框架(react/vue/svelte/vanilla.js等)。例如果港,一些簡單的頁面(中轉(zhuǎn)頁面等)首選技術(shù)棧是vanilla.js(原生Javascript) 沦泌,但是由于多頁面框架的限制,被迫引入了react辛掠。

大部分多頁面項目架構(gòu)是為了滿足這類碎片化頁面的開發(fā)(介紹頁和活動頁)谢谦。其訴求是:

  • 技術(shù)棧通用化,能支持多種不同的前端框架
  • 具有極致的調(diào)試效率萝衩,支持hot reload
  • 傻瓜式保姆式地初始化文件回挽、壓縮和注入引用

什么是quickpage

quickpage是一個開源前端工具,正是為了解決以上問題猩谊,它的命名含義在于快速滿足頁面的開發(fā)和構(gòu)建千劈。

隨著 bundleless 的發(fā)展,大家對開發(fā)效率牌捷、打包體積墙牌,打包效率有了更高的要求涡驮。《ESM Import與Bundleless》一文介紹了前端工程化的未來發(fā)展方向。所以在技術(shù)選型上喜滨,考慮到開發(fā)效率捉捅、頁面的獨立性以及 bundleless 前端工程化,項目首先選用 vite 來作為底層的基礎(chǔ)鸿市,它能夠支持 vue锯梁,react即碗,svelte 等主流框架或是 vanilla.js 無框架寫法焰情,它有著非常好的構(gòu)建基礎(chǔ)以及周邊生態(tài)體系。

在 vite 的基礎(chǔ)上剥懒,quickpage 提供了以下額外能力内舟,達到“開箱即用”的效果。

  • 初始化項目
  • 目錄結(jié)構(gòu)的約束
  • 友好的交互命令行
  • 按需開發(fā)
  • 按需構(gòu)建

項目的初始化有兩種方式初橘。一種是通過 npm 官方方式來初始化項目(如下方命令)验游,工具會自動幫你創(chuàng)建一個vallina.js demo項目,你可以直接修改該頁面保檐,或者重新創(chuàng)建子頁面耕蝉。

npm init quickpage your-project

另一種則是相對高自由度的方式,直接創(chuàng)建一個文件夾夜只,安裝最新版本的vitequickpage-cli垒在,通過命令行創(chuàng)建子頁面,也能達到同樣的效果扔亥。

mkdir your-project && cd your-project
npm i vite quickpage-cli --save-dev

目錄結(jié)構(gòu)是以 pages 文件夾作為多頁面項目的基礎(chǔ)场躯,每個單獨的子頁面項目則是它的子文件夾,所有的子頁面都平鋪在該文件夾旅挤。這么一來踢关,我們能夠清楚了解項目中包含多少個子頁面。項目中有一個vite.config.js用于配置前端工程粘茄,所有的配置都會直接作用到該項目當中签舞,充分且毫無保留地利用了 vite 的所有能力,也確保了 quickpage 和 vite 的獨立性柒瓣。

創(chuàng)建一個子頁面是多頁面項目的基本操作儒搭。quickpage 與其他多頁面框架不同,去除了所有復(fù)雜的配置嘹朗,開發(fā)者只需要利用quickpage create命令創(chuàng)建子頁面师妙,根據(jù)交互式命令輸入頁面名字頁面框架類型(例如react)即可。它將會自動幫你創(chuàng)建一個單獨的目錄屹培,每個子頁面都可以擁有獨立的技術(shù)棧默穴,復(fù)雜的頁面可以選擇 react怔檩,簡單的頁面可以選擇 svelte。

創(chuàng)建一個子頁面

按需開發(fā)蓄诽,也可以理解為局部開發(fā)薛训。以往的開發(fā)經(jīng)驗告訴我們,涉及到修改的頁面往往只是其中一小部分仑氛,大家都習(xí)慣了“小步快走”的迭代節(jié)奏乙埃。開發(fā)者可以利用quickpage dev選擇性地調(diào)試部分頁面,每個頁面靈活可控锯岖。如果項目中頁面太多介袜,命令行還提供了模糊搜索的能力。

按需開發(fā)

按需構(gòu)建出吹,也可以理解為局部構(gòu)建遇伞。根據(jù)我們的需求范圍,利用quickpage build這個命令捶牢,選擇性地構(gòu)建部分頁面鸠珠,避免需求不涉及的頁面被重復(fù)構(gòu)建,再將這些頁面以最小的獨立單元進行部署秋麸,降低上線的風(fēng)險渐排。

按需構(gòu)建

橫向?qū)Ρ?/h2>

和webpack多頁面的對比

webpack 多頁面是基于多入口的實現(xiàn),由于在開發(fā)調(diào)試的時候灸蟆,所有入口都會重新計算 bundle驯耻,所以隨著項目頁面逐漸變多,調(diào)試效率會大幅下降次乓。

quickpage 的開發(fā)模式是基于 vite 吓歇,所以在調(diào)試過程中,它充分利用了bundleless 的優(yōu)勢票腰,有效減少了構(gòu)建的計算城看,只是做了簡單的轉(zhuǎn)譯。而且 quickpage 可以按需開發(fā)以及按需構(gòu)建杏慰,確保了涉及頁面數(shù)量的最小化测柠。

和vite官方多頁面的對比

vite 官方也支持多頁面,具體參考vite多頁面應(yīng)用模式缘滥,它的調(diào)試效率固然不是問題轰胁。

quickpage 與它的不同點在于目錄結(jié)構(gòu)約束以及按需構(gòu)建。正是由于固定的目錄結(jié)構(gòu)朝扼,我們能夠清楚知道項目里面有多少個頁面赃阀,哪些頁面可以被開發(fā)或者構(gòu)建。雖然它們共用一份配置擎颖,但是我們能夠選擇性地構(gòu)建頁面榛斯,并執(zhí)行增量式的部署观游。

總結(jié)

針對現(xiàn)實前端工程場景中碎片化頁面,quickpage 應(yīng)該算是一個靈活可控的多頁面小工具驮俗,解決大家倉庫碎片化和工程配置沒法統(tǒng)一的問題懂缕,很好地支持它們的開發(fā)和構(gòu)建等工作。歡迎大家查看源碼王凑,有問題可以提issue搪柑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市索烹,隨后出現(xiàn)的幾起案子工碾,更是在濱河造成了極大的恐慌,老刑警劉巖术荤,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倚喂,死亡現(xiàn)場離奇詭異,居然都是意外死亡瓣戚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門焦读,熙熙樓的掌柜王于貴愁眉苦臉地迎上來子库,“玉大人,你說我怎么就攤上這事矗晃÷匦幔” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵张症,是天一觀的道長仓技。 經(jīng)常有香客問我,道長俗他,這世上最難降的妖魔是什么脖捻? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮兆衅,結(jié)果婚禮上地沮,老公的妹妹穿的比我還像新娘。我一直安慰自己羡亩,他們只是感情好摩疑,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著畏铆,像睡著了一般雷袋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辞居,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天楷怒,我揣著相機與錄音寨腔,去河邊找鬼。 笑死率寡,一個胖子當著我的面吹牛迫卢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冶共,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼乾蛤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捅僵?” 一聲冷哼從身側(cè)響起家卖,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庙楚,沒想到半個月后上荡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡馒闷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年酪捡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纳账。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡逛薇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疏虫,到底是詐尸還是另有隱情永罚,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布卧秘,位于F島的核電站呢袱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏翅敌。R本人自食惡果不足惜羞福,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哼御。 院中可真熱鬧坯临,春花似錦、人聲如沸恋昼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽液肌。三九已至挟炬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谤祖。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工婿滓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粥喜。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓凸主,卻偏偏與公主長得像,于是被迫代替她去往敵國和親额湘。 傳聞我的和親對象是個殘疾皇子卿吐,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

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