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

          老板:你來弄一個團(tuán)隊代碼規(guī)范!?

          共 3453字,需瀏覽 7分鐘

           ·

          2022-01-08 17:52

          點(diǎn)擊上方 前端瓶子君,關(guān)注公眾號

          回復(fù)算法,加入前端編程面試算法每日一題群


          本篇文章講怎么在前端團(tuán)隊快速制定并落地代碼規(guī)范!!!
          干貨,拿走這個倉庫[1]

          image.png

          一、背景

          9月份換了一個新部門,部門成立時間不長,當(dāng)時組內(nèi)還沒有統(tǒng)一的代碼規(guī)范(部分工程用了規(guī)范,部分沒有,沒有統(tǒng)一的收口)

          小組的技術(shù)棧框架有VueReactTaroNuxt,用Typescript,算是比較雜了,結(jié)合到部門后續(xù)還可能擴(kuò)展其他技術(shù)棧,我們從0-1實(shí)現(xiàn)了一套通用的代碼規(guī)范

          到現(xiàn)在小組內(nèi)也用起來幾個月了,整個過程還算是比較順利且快速,最近得空分享出來~

          ??本篇文章不會講基礎(chǔ)的具體的規(guī)范,而是從實(shí)踐經(jīng)驗(yàn)講怎么制定規(guī)范以及落地規(guī)范

          image.png

          二、為什么要代碼規(guī)范

          就不說了...大家懂的~

          不是很了解的話,指路[2]

          三、確定規(guī)范范圍

          首先,跟主管同步,團(tuán)隊需要一個統(tǒng)一的規(guī)范,相信主管也在等著人來做起來

          第一步收集團(tuán)隊的技術(shù)棧情況,確定規(guī)范要包括的范圍

          把規(guī)范梳理為三部分ESLintStyleLintCommitLint,結(jié)合團(tuán)隊實(shí)際情況分析如下

          • ESLint:團(tuán)隊統(tǒng)一用的TypeScript,框架用到了VueReactTaro、還有Nuxt
          • StyleLint:團(tuán)隊統(tǒng)一用的Less
          • CommitLint:git代碼提交規(guī)范

          當(dāng)然,還需考慮團(tuán)隊后續(xù)可能會擴(kuò)展到的技術(shù)棧,以保證實(shí)現(xiàn)的時候確保可擴(kuò)展性

          四、調(diào)研業(yè)內(nèi)實(shí)現(xiàn)方案

          常見以下3種方案

          1. 團(tuán)隊制定文檔式代碼規(guī)范,成員都人為遵守這份規(guī)范來編寫代碼

            靠人來保證代碼規(guī)范存在不可靠,且需要人為review代碼不規(guī)范,效率低

          2. 直接使用業(yè)內(nèi)已有成熟規(guī)范,比如css使用StyleLint官方推薦規(guī)范stylelint-config-standard、stylelint-order,JavaScript使用ESLint推薦規(guī)范eslint:recommended等

            a) 開源規(guī)范往往不能滿足團(tuán)隊需求,可拓展性差; b) 業(yè)內(nèi)提供的規(guī)范都是獨(dú)立的(stylelint只提供css代碼規(guī)范,ESLint只提供JavaScript規(guī)范),是零散的,對于規(guī)范初始化或升級存在成本高、不可靠問題(每個工程需要做人為操作多個步驟)

          3. 基于StyleLint、ESLint制定團(tuán)隊規(guī)范npm包,使用團(tuán)隊制定規(guī)范庫

            a) 該方案解決可擴(kuò)展性差的問題,但是第二點(diǎn)中的(b)問題依舊存在

          五、我們的技術(shù)方案

          整體技術(shù)思路圖如下圖,提供三個基礎(chǔ)包@jd/stylelint-config-selling@jd/eslint-config-selling@jd/commitlint-config-selling分別滿足StyleLintESLintCommitLint

          1. @jd/stylelint-config-selling包括css、less、sass(團(tuán)隊暫未使用到)
          2. @jd/eslint-config-selling包括Vue、React、Taro、Next、nuxt(團(tuán)隊暫未使用到)...,還包括后續(xù)可能會擴(kuò)展到需要自定義的ESLint插件或者解析器
          3. @jd/commitlint-config-selling統(tǒng)一使用git

          向上提供一個簡單的命令行工具,交互式初始化init、或者更新update規(guī)范

          image.png

          幾個關(guān)鍵點(diǎn)

          1、用lerna統(tǒng)一管理包

          lerna[3]是一個管理工具,用于管理包含多個軟件包(package)的 JavaScript項(xiàng)目,業(yè)內(nèi)已經(jīng)廣泛使用了,不了解的可以自己找資料看下
          項(xiàng)目結(jié)構(gòu)如下圖

          2、三個基礎(chǔ)包的依賴包都設(shè)置為生產(chǎn)依賴dependencies

          如下圖,包@jd/eslint-config-selling的依賴包都寫在了生產(chǎn)依賴,而不是開發(fā)依賴
          解釋下:開發(fā)依賴&生產(chǎn)依賴

          • 開發(fā)依賴:業(yè)務(wù)工程用的時候不會下載開發(fā)依賴中的包,業(yè)內(nèi)常見的規(guī)范如standardairbnb都是寫在開發(fā)依賴
            • 缺點(diǎn):業(yè)務(wù)工程除了安裝@jd/eslint-config-selling外,需要自己去安裝前置依賴包,如eslint、根據(jù)自己選擇的框架安裝相關(guān)前置依賴包如使用的Vue需要安裝eslint-plugin-vue...使用成本、維護(hù)升級成本較高
            • 優(yōu)點(diǎn):按需安裝包,開發(fā)時不會安裝多余的包(Lint相關(guān)的包在業(yè)務(wù)工程中都是開發(fā)依賴,所以只會影響開發(fā)時)
          • 生產(chǎn)依賴:業(yè)務(wù)工程用的時候會下載這些包
            • 優(yōu)點(diǎn):安裝@jd/eslint-config-selling后,無需關(guān)注前置依賴包
            • 缺點(diǎn):開發(fā)時會下載@jd/eslint-config-selling中所有寫在生產(chǎn)依賴的包,即使有些用不到,比如你使用的是React,卻安裝了eslint-plugin-vue

          3、提供簡單的命令行

          這個比較簡單,提供交互式命令,支持一鍵初始化或者升級3種規(guī)范,就不展開說了

          不會的,指路中高級前端必備:如何設(shè)計并實(shí)現(xiàn)一個腳手架[4]

          組里現(xiàn)在還沒有項(xiàng)目模版腳手架,后續(xù)有的話需要把規(guī)范這部分融進(jìn)去

          六、最重要的一點(diǎn)

          什么是一個好的規(guī)范?
          基本每個團(tuán)隊的規(guī)范都是不一樣的,團(tuán)隊各成員都認(rèn)同并愿意遵守的規(guī)范

          所以確定好技術(shù)方案后,涉及到的各個規(guī)范,下圖,我們在小組內(nèi)分工去制定,比如幾個人去制定styleLint的,幾個人制定Vue的...

          然后拉會評審,大家統(tǒng)一通過的規(guī)范才敲定 最后以開源的方式維護(hù)升級,使用過程中,遇到規(guī)范不合適的問題,提交issue,大家統(tǒng)一討論確定是否需要更改規(guī)范

          寫在結(jié)尾

          以上就是我們團(tuán)隊在前端規(guī)范落地方面的經(jīng)驗(yàn)~

          如果大家感興趣,可查看github倉庫[5]


          關(guān)于本文

          作者:jjjona0215

          https://juejin.cn/post/7033210664844066853

          最后

          歡迎關(guān)注【前端瓶子君】??ヽ(°▽°)ノ?
          回復(fù)「算法」,加入前端編程源碼算法群,每日一道面試題(工作日),第二天瓶子君都會很認(rèn)真的解答喲!
          回復(fù)「交流」,吹吹水、聊聊技術(shù)、吐吐槽!
          回復(fù)「閱讀」,每日刷刷高質(zhì)量好文!
          如果這篇文章對你有幫助,在看」是最大的支持
           》》面試官也在看的算法資料《《
          “在看和轉(zhuǎn)發(fā)”就是最大的支持



          瀏覽 56
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  亚洲精品在线观看视频 | 国产成人精品久久久 | 欧美精品久久久久黄片18试看 | 欧美一级视频网站 | 韩日三级毛片 |