<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>

          社區(qū)精選 | 叮~您有一封 Vue.js 挑戰(zhàn)邀請(qǐng)函,請(qǐng)查收

          共 4561字,需瀏覽 10分鐘

           ·

          2022-07-05 17:49

          今天為各位推薦的是社區(qū)作者 null仔 的文章 ,在這篇文章中他為大家介紹了一個(gè) Vue.js 在線挑戰(zhàn)平臺(tái) vuejs-challenges,希望能助力同學(xué)們學(xué)習(xí) Vue.js。


          讓我們一起來(lái)看看吧!


          前言



          大家好,我是 webfansplz.今天要跟大家分享的是 vuejs-challenges,一個(gè) Vue.js 在線挑戰(zhàn)平臺(tái),它提供了一些題庫(kù),開(kāi)發(fā)者可以在線進(jìn)行挑戰(zhàn).通過(guò)這些挑戰(zhàn),我們可以進(jìn)一步了解和熟悉 Vue.js,希望它能對(duì)想學(xué)習(xí) Vue.js 的同學(xué)有所幫助.


          GitHub主頁(yè):
          https://github.com/webfansplz
          項(xiàng)目地址:
          https://github.com/webfansplz/vuejs-challenges


          背景



          距離 Vue 3.0 發(fā)布已經(jīng)快兩年了,Vue 2.0 也在上周五迎來(lái)了它的最后一個(gè)版本 Vue 2.7,周五難道不應(yīng)該有周五的態(tài)度嗎...好吧,那我就周末再 Juan 起來(lái)~


          Vue3 正式版發(fā)布快兩年了,筆者接觸 Vue3 也快兩年了 (兩年前一個(gè)項(xiàng)目的重構(gòu)搭上 "One Piece"的首班車(chē)).這段時(shí)間的實(shí)踐沉淀了一些經(jīng)驗(yàn),前段時(shí)間我就在想,有沒(méi)有可能有這樣一個(gè)平臺(tái),大家可以分享自己在工作中遇到的一些 Vue.js 難題,又可以通過(guò)別人分享的經(jīng)驗(yàn)受益.在幫助別人的時(shí)候,自己也能有收獲,那就太棒了.這也就是 vuejs-challenges 誕生的由來(lái),希望我們可以在這里相互分享,共同成長(zhǎng).


          介紹



          接下來(lái)跟大家介紹一下 vuejs-challenges :


          題庫(kù)


          vuejs-challenges 目前有 20 多道題目,題庫(kù)主要分為兩個(gè)維度:


          • 難度

            難度包含熱身/簡(jiǎn)單/中等/困難/地獄.挑戰(zhàn)者可以根據(jù)自身情況/需求選擇不同的難度進(jìn)行階段性的練習(xí).



          • 標(biāo)簽
            標(biāo)簽覆蓋了響應(yīng)式系統(tǒng) API 的考察,組合式 API 的應(yīng)用以及自定義指令,可組合函數(shù)的使用等.挑戰(zhàn)者可以挑選自己比較陌生/不熟悉的模塊進(jìn)行針對(duì)性的練習(xí).



          題庫(kù)才剛建立不久(還在持續(xù)補(bǔ)充中),然而一個(gè)人的精力和遇到的使用場(chǎng)景是有限的,我想我需要站在巨人的肩膀上,借著大家的幫助,一起來(lái)完善它,為了讓大家能快速簡(jiǎn)單的貢獻(xiàn)題庫(kù),vuejs-challenges 提供了一套自動(dòng)化能力.后面我們?cè)賮?lái)詳細(xì)介紹它.

          挑戰(zhàn)方式


          vuejs-challenges 使用 Vue SFC Playground 進(jìn)行在線編碼,挑戰(zhàn)者無(wú)需任何的安裝和下載便可開(kāi)啟挑戰(zhàn),并且實(shí)時(shí)調(diào)試和預(yù)覽.


          參與貢獻(xiàn)


          眾所皆知,一個(gè)開(kāi)源項(xiàng)目的成長(zhǎng)離不開(kāi)社區(qū)開(kāi)發(fā)者的貢獻(xiàn),vuejs-challenges 也是如此,大家有以下幾種方式可以參與貢獻(xiàn):

          • 完善已有題目的測(cè)試用例

          • 提供針對(duì)題目的學(xué)習(xí)資料或方法

          • 分享你在真實(shí)項(xiàng)目中遇到的 Vue.js 問(wèn)題(無(wú)論你找到答案與否)

          • 通過(guò)在 Issue 下留言幫助他人

          • 分享你的答案或解題思路

          • 提案加入新的題目


          解法分享

          項(xiàng)目提供了相應(yīng)的 Issue 模版,分享人只要選擇模版并提供解法,其他挑戰(zhàn)者在檢索解決方案的時(shí)候就可以查找到了.


          提案加入新的題目

          項(xiàng)目同樣針對(duì)新題目提案提供了 Issue 模版,開(kāi)發(fā)者只需要根據(jù) Issue 模版提供的內(nèi)容準(zhǔn)確填充信息,一個(gè)新提案的 PR 就會(huì)被自動(dòng)生成.這樣開(kāi)發(fā)者就不用閱讀項(xiàng)目本身的代碼并且熟悉協(xié)作流程和規(guī)范,大大降低了貢獻(xiàn)新提案的成本.


          文檔


          項(xiàng)目除了基于 Github README 提供了題庫(kù)列表,我們還使用 VitePressNetlify 部署了文檔,提供給挑戰(zhàn)者多一種選擇.



          順帶一提,VitePress 的新版文檔是真的帥:


          原理



          看完了項(xiàng)目的介紹,相信有些同學(xué)會(huì)對(duì)它的實(shí)現(xiàn)原理感興趣,接下來(lái)我們就來(lái)一探究竟,我們主要分享以下3點(diǎn):


          在線挑戰(zhàn)鏈接是如何生成的 ?


          前面我們提到了在線挑戰(zhàn)是基于 Vue SFC Playground 進(jìn)行的,好,那我們就來(lái)看看它的源碼.


          從上圖中我們可以看到 Vue SFC Playground 的核心其實(shí)是在 vuejs/repl 實(shí)現(xiàn)的.一句話簡(jiǎn)單介紹一下它,vuejs/repl 是一個(gè)用來(lái)解析 Vue3 單文件組件的交互式解釋器.

          項(xiàng)目地址:
          https://github.com/vuejs/repl

          我們回歸到需求本身,我們的需求其實(shí)就是將題目轉(zhuǎn)化為在線 Playground 鏈接.這個(gè)需求可以拆解為兩個(gè)功能:

          • 讀取題目?jī)?nèi)容
            這個(gè)簡(jiǎn)單,對(duì)于精通使用 Node.js File System API 來(lái) CRUD 的我自然不在話下 ??.

          • 題目?jī)?nèi)容轉(zhuǎn)化為鏈接
            獲取到了文件內(nèi)容,那我們要怎么將它傳遞給 Playground 呢 ? 我們先來(lái)看一張圖:


          通過(guò)上圖我們看到,鏈接的 hash 值隨著我們的輸入在變化,這就可以確認(rèn)我們的需求可行性是 OK 的,接下來(lái)我們還是需要去看下 vuejs/repl 的源碼,明確它接收的參數(shù)格式.這塊的源碼邏輯稍微有點(diǎn)分散,就不帶大家漫游源碼了.vuejs/repl 需要提供的鏈接格式大致如下:

          const content = {
           [文件名]: 文件內(nèi)容
          }const url = `${SFC_HOST}#${編碼(content)}`

          vuejs/repl 接收到參數(shù)后再進(jìn)行解碼并創(chuàng)建對(duì)應(yīng)的文件,這便是整個(gè)流程的原理了.

          新提案提交的Issue是如何自動(dòng)生成PR的 ?


          這個(gè)功能的核心其實(shí)就是 Github Actions,它是 Github 在 2018 年 10 月推出的一個(gè) CI/CD 服務(wù).簡(jiǎn)單來(lái)說(shuō)就是 Github 為你提供了一些鉤子和 API,能讓你創(chuàng)建你的工作流,做到自動(dòng)化構(gòu)建,測(cè)試,部署等.Github Actions 的靈活性很高,非常好用,它的出現(xiàn)更是為很多開(kāi)源項(xiàng)目的維護(hù)者節(jié)約了很多時(shí)間和精力.接下來(lái)我們簡(jiǎn)單介紹一下這個(gè)流程:

          • 創(chuàng)建工作流:


          # .github/workflows/issue-pr.yaml# 工作流名稱(chēng)name: Issue to Pull Request# 鉤子,監(jiān)聽(tīng)到issue創(chuàng)建和修改,調(diào)用此工作流on:
            issues:
              types: [opened, edited]# 具體邏輯jobs:
            start:
              runs-on: ubuntu-latest
              steps:
                - uses: actions/checkout@v2
                - run: cd scripts && npm i --only=production
                # 具體邏輯處理
                - run: cd scripts/actions && npx ...

          • 解析 Issue 內(nèi)容并轉(zhuǎn)換為題庫(kù)的內(nèi)容

          這塊的原理其實(shí)就是通過(guò)正則來(lái)匹配相應(yīng)的模塊內(nèi)容并轉(zhuǎn)化為創(chuàng)建題庫(kù)所需要的文件內(nèi)容就可以了,眾所皆知,能用 JavaScript 實(shí)現(xiàn)的最終...你懂的.

          • 提交PR


          這個(gè)其實(shí)就是一個(gè) HTTP 請(qǐng)求的事情,可詳見(jiàn) Create a pull request.

          文檔地址:
          https://docs.github.com/cn/rest/pulls/pulls#create-a-pull-request

          以上就是 Issue 轉(zhuǎn) PR 的工作原理.

          如何構(gòu)建題庫(kù)文檔 ?


          前面我們提到了文檔使用了 VitePress 和 Netlify 進(jìn)行構(gòu)建,這里主要介紹它們.

          VitePress介紹


          文檔的實(shí)現(xiàn)我們主要利用了 VitePress 約定式路由的特點(diǎn)及 Markdown 解析的能力.

          利用 VitePress 天然支持的這兩個(gè)能力,我們就可以很容易的找到題庫(kù)與之的對(duì)應(yīng)關(guān)系和文檔的呈現(xiàn).

          Netlify


          The fastest way to build the fastest sites (用最快的方式構(gòu)建最快的網(wǎng)站)是 Netlify 的宣傳語(yǔ).是的,你要做的事情只有一個(gè),就是將 Github 項(xiàng)目與它關(guān)聯(lián),進(jìn)行授權(quán).在此之后,一切都是自動(dòng)的. 最重要的是,它免費(fèi) ! 害,真香 ! 對(duì)我這個(gè)懶人來(lái)說(shuō),Netlify 就是構(gòu)建網(wǎng)站的神器.

          致謝



          這個(gè)項(xiàng)目的靈感和實(shí)現(xiàn)大多來(lái)自于 Anthony Fu 的 type-challenges ??.

          尤大的 vuejs/repl 讓這個(gè)項(xiàng)目成為了可能 ??.

          GitHub 主頁(yè):
          https://github.com/antfu
          項(xiàng)目主頁(yè):
          https://github.com/type-challenges/type-challenges

          結(jié)語(yǔ)


          文章到這里就結(jié)束了,但挑戰(zhàn)才剛剛開(kāi)始.vuejs-challenges 期待你的挑戰(zhàn)和貢獻(xiàn) ??.

          如果我的文章和項(xiàng)目對(duì)你有所啟發(fā)和幫助,請(qǐng)給一個(gè) star 支持作者 ?.



          SegmentFault 思否社區(qū)小編說(shuō)


          自 2022-07-01 起 SegmentFault 思否公眾號(hào)改版啦!之后將陸續(xù)推出新的欄目和大家見(jiàn)面?。ㄕ?qǐng)拭目以待呀~?


          在「社區(qū)精選」欄目中,我們將為廣大開(kāi)發(fā)者推薦來(lái)自 SegmentFault 思否開(kāi)發(fā)者社區(qū)的優(yōu)質(zhì)技術(shù)文章,這些文章全部出自社區(qū)中充滿(mǎn)智慧的技術(shù)創(chuàng)作者哦!


          希望通過(guò)這一欄目,大家可以共同學(xué)習(xí)技術(shù)干貨,GET 新技能和各種花式技術(shù)小 Tips。


          歡迎越來(lái)越多的開(kāi)發(fā)者加入創(chuàng)作者的行列,我們將持續(xù)甄選出社區(qū)中優(yōu)質(zhì)的內(nèi)容推介給更多人,讓閃閃發(fā)光的技術(shù)創(chuàng)作者們走到聚光燈下,被更多人認(rèn)識(shí)。


          「社區(qū)精選」投稿郵箱:[email protected]

          投稿請(qǐng)附上社區(qū)文章地址





          點(diǎn)擊左下角閱讀原文,到 SegmentFault 思否社區(qū) 和文章作者展開(kāi)更多互動(dòng)和交流,公眾號(hào)后臺(tái)回復(fù)“ 入群 ”即可加入我們的技術(shù)交流群,收獲更多的技術(shù)文章~

          - END -

          瀏覽 58
          點(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>
                  国产精品98 | 看操年轻小媳妇逼毛片视频 | 欧美综合一区 | 十八禁网站无码 | 久久久精品 |