<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手 從 0 到 1 搞定官網(wǎng)開(kāi)發(fā)

          共 5319字,需瀏覽 11分鐘

           ·

          2022-05-20 01:49

          大廠技術(shù)??高級(jí)前端??Node進(jìn)階

          點(diǎn)擊上方?程序員成長(zhǎng)指北,關(guān)注公眾號(hào)

          回復(fù)1,加入高級(jí)Node交流群

          目的

          • 聚焦開(kāi)源官網(wǎng)開(kāi)發(fā),分享從 01 的官網(wǎng)開(kāi)發(fā)實(shí)踐經(jīng)驗(yàn)
          • 作為一個(gè)系列文章開(kāi)頭,不定期分享我在開(kāi)源實(shí)踐方面的總結(jié)和經(jīng)驗(yàn),歡迎關(guān)注

          內(nèi)容

          文章主要介紹以下內(nèi)容:

          • 需求、設(shè)計(jì)、實(shí)現(xiàn)思路
          • 技術(shù)選型:pnpm + turbo + vue3 + ts + vite + vitepress + 服務(wù)端( node | go ) + vercel
          • 技術(shù)架構(gòu)
          • 構(gòu)建部署
          • 預(yù)覽與源碼
          • 開(kāi)源實(shí)踐總結(jié)、附(文中提及名詞地址)

          需求

          給開(kāi)源項(xiàng)目 Monibuca 換官網(wǎng),包含以下功能:

          • 官網(wǎng)首頁(yè):Monibuca 的主頁(yè)
          • 文檔教程頁(yè):Monibuca 的使用文檔
          • 后端服務(wù):提供 go 包下載轉(zhuǎn)發(fā)

          Monibuca 是什么?

          Monibuca 是開(kāi)源 Go 語(yǔ)言流媒體服務(wù)器開(kāi)發(fā)框架。如下圖所示:

          ui 設(shè)計(jì)

          ui 這塊, 有團(tuán)隊(duì)中的設(shè)計(jì)朋友在幫忙設(shè)計(jì)官網(wǎng) pc 首頁(yè),其他的如文檔教程頁(yè)、移動(dòng)端自適應(yīng)等功能,則自行開(kāi)發(fā)實(shí)現(xiàn)。

          設(shè)計(jì)稿如下圖所示:

          主要設(shè)計(jì)內(nèi)容如下:

          • 整體分為 【導(dǎo)航 + banner + 內(nèi)容 + 底部】 四個(gè) ui 模塊
          • 整體版心固定為 1200px
          • banner 版心固定為 1400px

          這期間,我們和設(shè)計(jì)師保持溝通,首頁(yè) ui 的設(shè)計(jì),是一個(gè)不斷溝通和調(diào)整的過(guò)程。

          自適應(yīng)方案

          pc 的自適應(yīng)方案不只一種,瀏覽了一些主流官網(wǎng),最終確定的自適應(yīng)方案如下:

          • 大屏幕(電腦)采用固定版心寬度,版心寬度 1200px 基本可以保證最小電腦屏幕能夠完整展示出來(lái)
          • 不做 rem 適配,使用媒體查詢(xún)進(jìn)行小屏幕( pad 、 手機(jī)等)適配

          提個(gè)問(wèn)題, 為什么 PC 頁(yè)面基本都不用 rem

          實(shí)現(xiàn)思路

          實(shí)現(xiàn)思路體現(xiàn)著平衡哲學(xué)。

          這里有一個(gè)前置考慮,那就是實(shí)現(xiàn)的代價(jià),主要代價(jià)如下:

          • 代價(jià)大:功能全部從 0 開(kāi)發(fā)(掌控感更好,但費(fèi)時(shí)費(fèi)力),采用最前沿技術(shù)(利于學(xué)習(xí)成長(zhǎng),但難度大)
          • 代價(jià)小:一部分功能從 0 開(kāi)發(fā),一部分功能站在開(kāi)源的肩膀上,采用前沿技術(shù)

          非全職維護(hù)開(kāi)源項(xiàng)目,既自由,又不自由,這里不自由主要體現(xiàn)在時(shí)間和精力的投入有限,所以綜合考慮下,選擇代價(jià)小的方案。

          隨后,我有目的的瀏覽了一些官網(wǎng),在綜合比較下,感覺(jué) vue 的官網(wǎng)整體不錯(cuò)。隨后閱讀了 vue 官網(wǎng)的源碼,結(jié)合實(shí)現(xiàn)代價(jià),定下了實(shí)現(xiàn)思路:

          • 技術(shù)選型在整體上和 vue 官網(wǎng)保持一致,如 vitepressvitevue
          • vitepress 主題使用 vue 主題進(jìn)行二次開(kāi)發(fā),并使用 pnpm workspace 進(jìn)行管理
          • 構(gòu)建使用 pnpmturbovite 三者結(jié)合,將構(gòu)建性能最大化
          • 部署使用 vercel 綁定 github 項(xiàng)目,實(shí)現(xiàn)靜態(tài)頁(yè)面和服務(wù)端端的自動(dòng)化部署

          技術(shù)選型

          實(shí)現(xiàn)思路確定后,整體技術(shù)選型也隨之確定,即如下:

          技術(shù)選型 = pnpm + turbo + vue3 + ts + vite + vitepress + 服務(wù)端(node | go) + vercel

          處了服務(wù)端,上述選型和 vue 官網(wǎng)的選型保持一致(整體理由),下面我會(huì)簡(jiǎn)要介紹各技術(shù)選型理由:

          pnpm + turbo

          目前的 monorepo 生態(tài)百花齊放,正確的實(shí)踐方法應(yīng)該是集大成法,也就是取各家之長(zhǎng),目前的趨勢(shì)也是如此,各開(kāi)源 monorepo 工具達(dá)成默契,專(zhuān)注自己擅長(zhǎng)的能力。

          pnpm 擅長(zhǎng)依賴(lài)管理, turbo 擅長(zhǎng)構(gòu)建任務(wù)編排。遂在 monorepo 技術(shù)選型上,我選擇了 pnpmturbo

          pnpm 理由如下:

          • 目前最好的包管理工具, pnpm 吸收了 npmyarnlerna 等主流工具的精華,并去其糟粕。
          • 生態(tài)、社區(qū)活躍且強(qiáng)大
          • 結(jié)合 workspace 可以完成 monorepo 最佳設(shè)計(jì)和實(shí)踐
          • 在管理多項(xiàng)目的包依賴(lài)、代碼風(fēng)格、代碼質(zhì)量、組件庫(kù)復(fù)用等場(chǎng)景下,表現(xiàn)出色
          • 在框架、庫(kù)的開(kāi)發(fā)、調(diào)試、維護(hù)方面,表現(xiàn)出色

          相比于 vue 官網(wǎng),在使用 pnpm 上,我加了 workspace


          turbo 理由如下:

          • 它是一個(gè)高性能構(gòu)建系統(tǒng),擁有增量構(gòu)建、云緩存、并行執(zhí)行、運(yùn)行時(shí)零開(kāi)銷(xiāo)、任務(wù)管道、精簡(jiǎn)子集等特性
          • 具有非常優(yōu)秀的任務(wù)編排能力,可以彌補(bǔ) pnpm 在任務(wù)編排上的短板

          vue3 + ts

          vue3 理由如下:

          • 2022年,使用 vue3 是必然趨勢(shì)(vue 技術(shù)棧)

          ts 理由如下:

          • 當(dāng)今,使用 ts 對(duì)你來(lái)說(shuō),是百利而無(wú)一害。
          • ts 可以幫助你更好的去接觸和使用其他語(yǔ)言,如 gokotlin

          vite

          大家已不陌生。

          理由如下:

          • 生態(tài)社區(qū)活躍且強(qiáng)大
          • 極速的服務(wù)啟動(dòng)、輕量快速的熱重載、功能豐富
          • 下一代前端開(kāi)發(fā)與構(gòu)建工具

          vitepress

          理由如下:

          • 極簡(jiǎn)主義,提供創(chuàng)作文檔所需的最低限度的功能,其他功能全部在主題完成
          • 底層使用 vue3 + vite ,性能更好
          • 更喜歡 JavaScript API 而不是文件布局約定

          我贊同 vitepress 的設(shè)計(jì)理念,目前 Monibuca 官網(wǎng)主題的實(shí)現(xiàn)方案是:

          fork @vue/theme 源碼 并用 pnpm 進(jìn)行管理和二次開(kāi)發(fā),然后慢慢演化成屬于 Monibuca 的主題。

          vitepress 官網(wǎng):vitepress.vuejs.org/[1]

          服務(wù)端 node | go

          node 理由如下:

          • node 是專(zhuān)屬前端的后端武器,同時(shí)也能和 pnpm workspace 完美兼容

          go 理由如下

          • go 是目前非常火的語(yǔ)言,也是前端突破 node 在服務(wù)端的發(fā)展限制的一條康莊大道

          這里我使用的 vercel 提供的 serverless api ,方便快速。

          技術(shù)選型總結(jié)

          至此,技術(shù)選型就介紹完了,上面闡述的技術(shù)選型,既有主流成熟、也有前沿趨勢(shì),整體上是一個(gè)不錯(cuò)的方案。

          當(dāng)前構(gòu)建過(guò)程,技術(shù)選型的趨勢(shì)是什么?

          筆者認(rèn)為,目前前端的構(gòu)建工具鏈已經(jīng)在快速被 RustGo 接管。如 swcvitevitestturbo , 速度之快,令人驚嘆。這也對(duì)前端工程師提出了更高的要求,激勵(lì)我們學(xué)無(wú)止境。

          技術(shù)選型確定后,已經(jīng)開(kāi)發(fā)并維護(hù)一段時(shí)間,還可以對(duì)技術(shù)選型進(jìn)行調(diào)整嗎?

          當(dāng)然可以,自信點(diǎn),把嗎字去掉。

          在架構(gòu)設(shè)計(jì)中,有一個(gè)原則叫演化原則,演化優(yōu)于一步到位,好的軟件,一定會(huì)不斷的進(jìn)行演化,這和人類(lèi)的演化,地球的演化,宇宙的演化都是一脈相承的。自然法則,大道至簡(jiǎn)。

          提到架構(gòu),那下面我將闡述官網(wǎng)的技術(shù)架構(gòu),請(qǐng)跟我一起往下看。

          技術(shù)架構(gòu)

          三個(gè)原則

          架構(gòu)設(shè)計(jì)有以下三個(gè)重要原則:

          • 合適原則:合適優(yōu)于業(yè)界領(lǐng)先
          • 簡(jiǎn)單原則:簡(jiǎn)單優(yōu)于復(fù)雜
          • 演化原則:演化優(yōu)于一步到位

          也就是說(shuō),大家在做架構(gòu)設(shè)計(jì)的時(shí)候,要有意識(shí)的讓架構(gòu)符合這三個(gè)原則,這樣會(huì)保證你的架構(gòu)設(shè)計(jì)至少在大方向上是保持正確的。

          常用軟件架構(gòu)

          這里提下常用的 4 種軟件架構(gòu):

          • 分層架構(gòu):如網(wǎng)絡(luò)七層協(xié)議、 MVX 模式 、 DDD 、都體現(xiàn)了分層架構(gòu)思想
          • 插件架構(gòu):如開(kāi)源項(xiàng)目 VSCodeVueMonibuca 的設(shè)計(jì)就體現(xiàn)了插件架構(gòu)思想
          • 事件驅(qū)動(dòng)架構(gòu):electron 進(jìn)程間通信(基于 nodeEventEmitter )體現(xiàn)了事件驅(qū)動(dòng)思想
          • 微服務(wù)架構(gòu):如 dubbo 服務(wù)、微前端 體現(xiàn)了微服務(wù)架構(gòu)思想

          分層架構(gòu)是最常用的軟件架構(gòu),有點(diǎn)遞歸的感覺(jué),先分大的層,在大的每一層,還可以分小的層。此外插件架構(gòu)也非常常用,前端層面,一般多使用分層架構(gòu)和插件架構(gòu)。

          俗語(yǔ)所說(shuō):麻雀雖小、五臟俱全。開(kāi)發(fā)官網(wǎng)雖然很容易,但依然可以擁有優(yōu)秀的架構(gòu)思想,下面將介紹我對(duì)官網(wǎng)進(jìn)行的架構(gòu)設(shè)計(jì)。

          官網(wǎng)架構(gòu)

          官網(wǎng)的軟件架構(gòu)圖如下所示:

          采用的是分層架構(gòu)設(shè)計(jì), 具體介紹如下:

          • Monorepo:使用 pnpm + turbo 來(lái)管理所有代碼,是一個(gè)不錯(cuò)的實(shí)踐。目前我還沒(méi)使用 changesets 做多包版本管理,后續(xù)如有必要會(huì)加上。
          • API 層:使用 vercelserverless api 來(lái)滿(mǎn)足官網(wǎng)的服務(wù)端需求,使用 vercel 平臺(tái)提供的 serverless 能力,降低了官網(wǎng)的維護(hù)成本(無(wú)需服務(wù)器)
          • 組件層:將配置、方法、組件、主題拆成組件,并用 pnpm workspace 進(jìn)行統(tǒng)一管理,具有良好的可復(fù)用性和可擴(kuò)展性
          • 業(yè)務(wù)層:目前只有 Monibuca 官網(wǎng),后續(xù)還會(huì)有其他官網(wǎng)需求,放在一起維護(hù),方便復(fù)用組件、統(tǒng)一依賴(lài)和代碼風(fēng)格
          • Devops:整體使用 pnpm + turbo 進(jìn)行構(gòu)建,組件層會(huì)使用相應(yīng)的構(gòu)建工具如 tsuprollup 等。代碼倉(cāng)庫(kù)使用 github 進(jìn)行托管,使用 vercel 綁定 github 來(lái)打通自動(dòng)化構(gòu)建部署

          上面的架構(gòu)圖不一定完全滿(mǎn)足分層架構(gòu),這個(gè)不重要,重要的是符合架構(gòu)的設(shè)計(jì)原則。下面進(jìn)行簡(jiǎn)單闡述:

          • 合適原則:u1s1 , 做到了既合適,又是業(yè)界領(lǐng)先。如 vitepress 開(kāi)發(fā)文檔頁(yè)、 pnpm 管理 Monorepo 、 使用 Vue3 + TSgithub + vercel 都是合適的
          • 簡(jiǎn)單原則:提現(xiàn)在自動(dòng)化構(gòu)建部署、組件拆分復(fù)用等
          • 演化原則:體現(xiàn)在服務(wù)端沒(méi)有做額外設(shè)計(jì),包括服務(wù)器都沒(méi)有購(gòu)買(mǎi),直接使用 vercel 完成,如果后面有其他需求,需要購(gòu)買(mǎi)服務(wù)器,那時(shí)我們?cè)僮龇?wù)端的設(shè)計(jì)

          技術(shù)架構(gòu)總結(jié)

          上文提到的常用軟件架構(gòu)不是獨(dú)立存在的,他們可能是交叉并存的,這些軟件架構(gòu)本身就遵循著合適、簡(jiǎn)單、演化等原則。我們要做的就是在軟件的生命周期中,運(yùn)用架構(gòu)設(shè)計(jì)來(lái)讓這個(gè)軟件發(fā)揮更大的價(jià)值,承載更多的使命。

          構(gòu)建部署

          構(gòu)建

          核心就是使用 pnpm + turbo 進(jìn)行構(gòu)建,大致介紹如下:

          • 使用 pnpm 安裝依賴(lài)和綁定 workspace
          • 使用 turbo 進(jìn)行任務(wù)編排,進(jìn)行多核并行構(gòu)建

          構(gòu)建過(guò)程如下圖:

          可以看到圖中 build 時(shí)間,用時(shí)非常少,構(gòu)建速度極快。

          具體使用方法請(qǐng)查閱官方文檔和 github 開(kāi)源案例。

          部署

          核心就是:使用 vercel 進(jìn)行自動(dòng)化構(gòu)建部署。

          關(guān)于 vercel 的使用,大家自行搜索,這里我闡述下部署流程,如下所示:

          1. 官網(wǎng)代碼提交到 github 倉(cāng)庫(kù)
          2. 使用 github 登錄 vercel , 綁定項(xiàng)目
          3. 進(jìn)行域名設(shè)置,綁定官網(wǎng)域名
          4. vercel 上填寫(xiě)構(gòu)建配置,這里我貼一下目前官網(wǎng)在 vercel 上的構(gòu)建配置,如下圖所示:

          只需要對(duì) Output Directory 進(jìn)行設(shè)置即可,其他不動(dòng) 5. 保存構(gòu)建配置,然后進(jìn)行構(gòu)建部署、發(fā)布對(duì)外 6. 后續(xù)官網(wǎng)只要提交代碼到 github 上,就會(huì)自動(dòng)觸發(fā)構(gòu)建部署

          部署采坑:

          官網(wǎng)使用了 pnpm workspaceturbo , 在使用 vercel 進(jìn)行構(gòu)建部署時(shí),遇到了本地成功,但在 vercel 構(gòu)建就無(wú)法成功的問(wèn)題,具體原因不祥, vercel 官網(wǎng)文檔內(nèi)容非常簡(jiǎn)單, github issuediscussion 上也沒(méi)看到有用的信息,最后谷歌搜到了一個(gè) youtube 視頻,是關(guān)于用 vercel 構(gòu)建部署 pnpm workspace + turbo + nextjs 。遂看完視頻,再結(jié)合自身理解,打通了這塊流程。

          預(yù)覽與源碼

          預(yù)覽:直接訪問(wèn)官網(wǎng) m7s.live/[2] 和上文設(shè)計(jì)圖基本一致

          源碼地址:github.com/godkun/webs…[3]

          源碼目錄如下圖所示:

          有需要的可以自行下載查看,此處不再做源碼內(nèi)容相關(guān)介紹。

          開(kāi)源實(shí)踐總結(jié)

          • 沒(méi)有固定 deadline ,靈活人性 ??
          • 沒(méi)有線上事故定責(zé),現(xiàn)在官網(wǎng)的 ui 還有點(diǎn)問(wèn)題,文檔還沒(méi)有補(bǔ)上,但沒(méi)關(guān)系,想發(fā)就發(fā),任性 ??
          • 開(kāi)發(fā)官網(wǎng)這種需求,技術(shù)自由,只要 hold 住和滿(mǎn)足需求,想玩什么技術(shù)都可以 ??
          • 找業(yè)界和開(kāi)源項(xiàng)目類(lèi)型相似的優(yōu)秀官網(wǎng)進(jìn)行參考,既然都是開(kāi)源,那就站在開(kāi)源的肩膀上,用魔法打敗魔法 ??

          • 文中架構(gòu)圖繪圖軟件:excalidraw.com/[4]
          • 圖床:picgo + github
          • 架構(gòu)原則參考書(shū)籍:《從零開(kāi)始學(xué)架構(gòu),照著做,你也能成為架構(gòu)師》
          • Monibuca 官網(wǎng):m7s.live/[5]
          • vitepress 官網(wǎng):vitepress.vuejs.org/[6]
          • vercel : vercel.com/dashboard[7]
          • pnpm + turbo + vercel 教程視頻: www.youtube.com/watch\?v=A-F…[8]


          關(guān)于本文

          作者:碼上有你

          https://juejin.cn/post/7087734351764389901


          Node 社群



          我組建了一個(gè)氛圍特別好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你對(duì)Node.js學(xué)習(xí)感興趣的話(后續(xù)有計(jì)劃也可以),我們可以一起進(jìn)行Node.js相關(guān)的交流、學(xué)習(xí)、共建。下方加 考拉 好友回復(fù)「Node」即可。



          如果你覺(jué)得這篇內(nèi)容對(duì)你有幫助,我想請(qǐng)你幫我2個(gè)小忙:

          1. 點(diǎn)個(gè)「在看」,讓更多人也能看到這篇文章
          2. 訂閱官方博客?www.inode.club?讓我們一起成長(zhǎng)

          點(diǎn)贊和在看就是最大的支持??

          瀏覽 74
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大鸡巴国产 | 亚洲 13p | 国产熟妇毛多 久久久久 | 黄色视频大全在线观看 | 色婷婷福利视频 |