基於gulp的前端框架開發規范


前端開發及相關規范 - 基於gulp的前端框架開發規范

1.前端開發工具的安裝和使用說明

前端開發工具的目錄結構

├── statics
    ├── html //靜態文件開發
    ├── js // 非require引入的js文件
    ├── Lib // 第三方JS包
    ├── ve_2_1 //
        ├── css // 樣式目錄
            ├── fonts // bootstrap的圖標字體
            ├── img // 圖片目錄
            ├── less // less源碼
            ├── sprite // 雪碧圖按目錄全稱目錄名的圖片
                ├── dirName
            ├── vender // 第三方css包,比如bootstrap
        ├── js // JS目錄
            ├── dist //生成文件的目錄(與開發源碼目模塊對應)
                ├── cart.js  
                ├── common.js 
                ├── lib.js 
                ├── region.js 
                ├── sidebar.js 
                ├── tpl.js 
                ├── user.js 
                ├── web.js 
            ├── src // 開發源碼的目錄
                ├── cart // 購物車模塊
                ├── common // 公共的函數模塊
                ├── lib // 公共jq插件模塊
                ├── region // 處理聯動地址的模塊
                ├── sidebar // 側邊欄模塊
                ├── tpl //  前端mvc模板引擎的壓縮源碼
                ├── user // 用戶中心模塊
                ├── web // VE前端模塊,包括首頁、親子、品牌專題、詳情頁等
            ├── tpl //
            ├── config.dev.js // requirejs 開發配置文件[自動生成]
            ├── config.js // requirejs開發配置文件[自動生成]
            ├── config.release.js //
            ├── config.test.js // requirejs 測試環境配置文件[自動生成]
            ├── js.map.json // 壓縮后的文件位置映射[自動生成]
            ├── path.json // requirejs 的 config -> path 內容,第三包的路徑縮寫配置
            ├── shim.json // requirejs 的 config -> shim 內容,第三包的依賴申明
            ├── ver_config.json // 開發、測試、預生產到發布,方便部署靜態資源,而創建的版本和環境變量
        ├── tpl //
            ├── toolbar
                ├── mian.html 
    ├── dot.gif // lazyloading的占位符
    ├── evc-VE.js // 在線客服的js
    ├── favicon.ico // 網站的縮略logo
    ├── README.md // 文檔首頁內容 markdown 語法
    ├── region.js // 地址

statics/Lib // 第三方JS包 目錄說明

每個包單獨一個文件夾,目的是:方便一個包多版本存放
如:jQuery 的 1.x 跟 2.x , 2.x 是針對移動版

安裝

  • 前往 http://nodejs.org/ 安裝nodeJS
    • 注意系統是32位還是64位的,選擇對應的版本
    • 如果是windows系統,需自行設置好環境變量,將nodejs的路徑加入到系統的 path 環境變量中
  • 在終端執行 npm install -g cnpm --registry=http://r.cnpmjs.org
  • 在終端執行 npm install -g gulp ,安裝 gulp 全局支持
  • 進入前端自動化開發和部署工具的目錄,執行 npm install(使用國外鏡像) 或 cnpm install(使用國內鏡像)

-- enjoy --

升級自動化工具

  • 進入前端自動化開發和部署工具的目錄,執行 npm install(使用國外鏡像) 或 cnpm install(使用國內鏡像)

執行自動化工具

以下操作,需進入 FeBuilder 的解壓目錄目錄下執行

  • gulp
    • 監控 less 文件變化,自動生成 css
    • 監控 js/src 文件變化, 自動在 dist 目錄生成對應的壓縮 js
    • 監控 js/src 文件變化, 自動在 doc 目錄,根據 jsdoc 格式,生成文檔
    • 監控 css/sprite 目錄,如果有新 sns 文件,自動生成雪碧圖

注:如果添加新目錄,需重新執行該指令,否則新目錄不會監控

  • gulp sprite 生成雪碧圖
  • gulp script 壓縮,合並,打包js
  • gulp less 編譯less文件
  • gulp watch

數據格式約定

  • 原則上,前端開發是完全可以脫離開發環境和生產環境來進行的,因為前端開發主要是開發一些靜態的資源,比如 HTML 、 CSS和 JS 等。
  • 與后端的通訊,我們約定以 JSON 的格式進行數據交換,那么前端開發完全就可以本地模擬一個 .json 格式的文件來進行開發調試。
  • 基於 JSON 的本地模擬數據,在與后端的同事溝通約定后,只需要對方API返回的數據結構和本地模擬的一致即可。

2.前端開發工具的相關約定

文件和目錄的命名約定

  • 必須是英文單詞、名字拼音或者名字拼音首字母;
  • 多個單詞用下划線(_)連接;
  • 只能出現英文字母、數字、連字符(_),嚴禁以中文名來命名;
    > 注:此命名約定適用於 html, css, js, swf, php, xml, png, gif, jpg, ico 等前端維護的所有文件類型和相關目錄

開發文件的建立

  • css
    • 基於gulp的前端框架,前端開發是通過編寫LESS,然后gulp會自動監聽LESS來生成壓縮的CSS,生成的文件與LESS同名
    • 在 css/less 目錄下建立LESS文件
    • 不需要輸出的CSS的,文件名要以下划線 _ 為前綴,通過 @import 包含的方式調用
    • 例如: @import "_ve_index";(注意,@import包含的less文件可將.less后綴省略掉)
    • 盡管LESS語法兼容CSS語法,但LESS源文件的編寫請遵循LESS語法,以提高它的可讀性和可維護性。 
      less.jpg
  • icon合成雪碧圖 -css sprite
    • 在 css/sprite 目錄下,按照功能模塊的不同來建立文件夾,然后將零星的小圖標放置在這個文件夾中;
    • 在gulp啟動的狀態下,它會自動監控文件夾中文件的變化,自動合成 css/img/dirName.png 雪碧圖及 css/less/_sp_dirName.less。
    • 通過 @import 包含的方式調用 _sp_dirName.less即可
    • 請注意,如果一個項目沒有icon,則不要建立一個空的文件夾,gulp會報錯。
什么是CSS Sprites??

CSS Sprites就是把網頁中一些背景圖片整合到一張圖片文件中,再利用CSS的background-image,background-repeat,background-position的組合進行背景定位,background-position可以用數字精確的定位出背景圖片的位置。利用CSS Sprites能很好地減少網頁的http請求,從而大大的提高頁面的性能,這也是CSS Sprites最大的優點。
css_sprite.jpg

  • Javascript

    為了項目更容易管理和團隊協作,js的開發需要以模塊化的方式進行。
    在 ve_2_1/js/src 目錄下建立按照功能模塊的不同,來建立文件夾及js文件

    • js要按照AMD規范來命名和書寫, 通過requireJS包管理器的方式來加載它依賴的其他js模塊;
    • js編譯好之后,會自動壓縮到 ve_2_1/js/dist 目錄,在頁面中需要配合require.js(js依賴管理)和config.js(依賴的配置文件)來加載自動壓縮后的js。
    • config.js有四個不同環境: config.dev.jsconfig.test.jsconfig.release.jsconfig.js 分別對應 開發環境測試環境預生產環境生產環境
    • 四個不同環境的js文件加載,在嵌套cms系統的前端模板時,只需要用 {php echo init_js();} (后端php同事要預先封裝好init_js 函數)來動態輸出即可。
      js.jpg
      *** 更多js模塊化開發的參考文檔:
    • RequireJS和AMD規范
    • Javascript模塊化編程1
    • Javascript模塊化編程2
    • Javascript模塊化編程3

    *** 舉例:

    ve雙城首頁的js,我們就建立在 js/src/web 目錄下,並命名為index.js,它依賴於'jquery.slide', 'web/common', 'web/timer'和jquery,而'jquery.slide', 'web/common', 'web/timer'也依賴於jqeury,jquery已被全局化,那么index.js應該是這樣的:

    • index.js:
    javascript codeBuilder - v0.9
        define('web/index', ['jquery.slide', 'web/common', 'web/timer'], function(slide, common) { var doc = document, win = window; //首頁大圖輪播 var _fullSlide = function() { var $sliderBox = $('.slider_box'); var $fullSlide = $('.fullSlide'); var imgs = $fullSlide.find('.bd .preload'); var now_img = $fullSlide.find('.bd img').eq(0); ... 

    又如 common.js應該是這樣的:

    • common.js:
    javascript codeBuilder - v0.9
        define('web/common', [], function() { var exports = {}; var doc = document, win = window; //網頁頂部的關注hover事件 exports.hover_qr = function() { $('.QRcode').on('mouseover', function() { $('.QRcode-box').toggle(); $('.QRcode i').toggleClass('selected'); }).on('mouseout', function() { $('.QRcode-box').toggle(); $('.QRcode i').toggleClass('selected'); }); }; ... 

    index.js 和common.js不需要在引用jquery.js,在它們內部中可以直接使用全局jquery中定義的 $符號。

    • 頁面中加載index.js的方法
        <script src="http://s1.ve.cn/statics/Lib/require/require.js?_v2.1"> </script><script src="http://s1.ve.cn/statics/Lib/jquery/jquery.min.js?_v2.1"></script> <script src="http://s1.ve.cn/statics/ve_2_1/js/config.js?_1415852637"></script> <!-- requireJS --> 
文檔的格式化 - tab制表符來控制縮進
  • 無論css、html還是js,開發的源文件都要適當地進行代碼的格式化,一律以tab制表符來控制縮進;
  • 調整自己的編輯器,將 tab制表符 以 4個空格 來替代。
    > 小技巧:在絕大部分IDE開發工具中, tab是縮進,而shift+tab則是刪除縮進。

3.HTML靜態模板規范

約定

  • 所有頁面元素的z-index屬性值控制在1000以下,將1000-2000留給組件級調用,2000以上用於解決特殊情況下的適應問題;
  • 所有的標簽及屬性名采用小寫,DOCTYPE除外;
  • 保證標簽語義化;
  • 分離思想,所有的樣式除特殊情況,css樣式不能內聯寫在style屬性中;
  • 如非必要,盡量不采用表格來布局頁面。
  • 如非項目需要,不使用html5特有的標簽,如canvas。

頁頭聲明

必須加上以下3項,提高兼容性

    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" /> <meta name="renderer" content="webkit" /> <meta name="viewport" content="width=device-width, initial-scale=1"> 

前 2 項,是指定 360 等國產瀏覽器,用 webkit 內核渲染頁面
后 1 項,是在移動端上,指定頁面的縮放比例

HTML注釋

開始和結束均需要帶有可識別的class或id,結束時則加斜杠 /(表示標簽閉合了)。

    <!-- 商品標題 --> <div class="breadcrumb"> <a href="">唯一優品首頁</a>&nbsp;&gt;&nbsp;<a href="">名品特賣</a>&nbsp;&gt;&nbsp;<a href="">新安怡夏季大促</a>&nbsp;&gt;&nbsp;<a href="" class="title">新安怡 嬰兒保濕潤膚乳液(200ml)</a> </div> <!-- 商品標題end --> 

css , js 文件,在頁面上的位置

  • 原則上, css 文件, 必須在 <head> 內
  • 原則上, js 文件, 必須在 </body> 結束前(盡可能的放底部),盡情避免在 <head> 內插入 js

script 標簽是阻塞式加載的。 如果一個 js 文件 比較大,或者 404 ,這將阻塞后面部分內容的加載

標准前端html模板 -- 僅供參考

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" /> <meta name="renderer" content="webkit" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>{title}</title> <meta name="description" content="{description}" /> <meta name="keywords" content="{keywords}" /> <!-- 樣式文件 --> <link rel="stylesheet" href="./../../ve_2_1/css/ve_wap.css" /> </head> <body> <section class=''> <div class="container"> <div class="row"> a </div> </div> </section> <!-- 尾部js --> <script src="./../../ve_2_1/js/vendor/require/require.js"></script> <script src="./../../ve_2_1/js/config.dev.js"></script> <!-- 替換結束 --> <!-- 自定義代碼部分 --> <script> //js codes here. require(['wap/index'], function() { require(['wap/indexJs']); }); </script> </body> </html> 

推薦使用的元素

  • 結構元素:blockquote, body, br, div, h1 - h6, head, hr, html, p
  • 頭部元素:base, link, meta, script, style, title
  • 列表元素:ul, ol, li, dl, dt, dd
  • 文本格式元素:a, abbr, acronym, address, bdo, cite, code, del, dfn, em, ins, kbd, noscript, pre, q, samp, small, span, strong, sub, sup, var
  • 表單元素:button, fieldset, legend, form, input, label, optgroup, option, select, textarea
  • 多媒體元素:area, img, map, object, param
  • 表格元素:caption, col, colgroup, table, tbody, td, tfoot, th, thead, tr
  • 窗體元素:iframe

不推薦使用的元素

  • 結構元素:無
  • 頭部元素:無
  • 列表元素:dir, menu
  • 文本格式元素:b, basefont, big, blink, center, comment, font, i, marquee, nobr, plaintext, ruby, s, strike, u, wbr, xmp
  • 表單元素:isindex
  • 多媒體元素:applet, bgsound, embed, noembed
  • 表格元素:無
  • 窗體元素:frame, frameset, noframes

轉世重生的元素

  • i - 作為單個圖標的展位符,表示icon
  • b - 預留,尚未想到合理的復活理由
  • s - 預留,尚未想到合理的復活理由

4.CSS規范

文件編碼約定

  • 所有文件一律采用 utf-8編碼

id 和 class 命名約定

  • id 和 class 的命名總規則為: 內容優先,表現為輔. 首先根據內容來命名, 比如 main-nav. 如果根據內容找不到合適的命名, 可以再結合表現來定, 比如 amount-choose, product-intro, main_nav,logo_box 名稱一律小寫, 多個單詞用下划線或者連字符連接, 比如 .time-countdown,size-choice,logo_box
  • class 名稱中只能出現小寫的 26 個英文字母、數字、下划線和連字符(-), 任何其它字符都嚴禁出現.
  • id的命名采用連接符命名法和下划線命名法,首字母小寫,如:buy-ok,shop_btn
  • id 和 class 盡量用英文單詞命名.確實找不到合適的單詞時, 可以考慮使用產品的中文拼音。
  • 對於中國特色詞匯可以使用拼音
  • 除了產品名稱和特色詞匯, 其它任何情況下都嚴禁使用拼音.
    * 在不影響語義的情況下, id 和 class 名稱中可以適當采用英文單詞縮寫, 比如 col, nav, hd, bd, ft 等, 但切忌自造縮寫.(常用縮寫總結在css規范部分)
  • id 和 class 名稱中的第一個詞必須是單詞全拼或語義非常清晰的單詞縮寫, 比如 goods, col.

基本規范

  • 模塊命名要注意帶上模塊名,下面盡可能的簡寫,頁面級(app應用級)命名應該盡量簡潔;
  • 盡可能地使用css-sprite
  • 盡量通過class屬性定義樣式,將id留給hook
  • 盡量不要在css中使用expression
  • 組件開發中,可以先不考慮性能,盡量使用選擇符組以方便html調用,如.table-ctrl tbody tr td.selected{};
  • font中的字體用英文或unicode代替,如黑體可寫成SimHei:font: 12px/1.5 SimHei ,tahoma,arial,\5b8b\4f53,sans-serif;

CSS引用

  • 統一以link形式引入
  • 不推薦內嵌形式引入css
  • 不推薦標簽出現在body中,特定頁面(比如404錯誤頁)除外。
  • 不推薦內聯CSS,請盡量放在head標簽內

常用CSS屬性順序建議

  • 顯示屬性(display, list-style, position, float, clear)
  • 盒模型(width, height, margin, padding, border, background)
  • 文本屬性(color, font, text-decoration, text-align, vertical-align, white-space, other text, content)

注釋風格

    /*頭注釋*/ /*------------------------------------------------ @Filename: ve_goods @Description: 產品內頁 ------------------------------------------------*/ //商品屬性區塊 //產品顏色選擇 /*爆款*/ 

5.Javascript規范

快速指引

  • 必須使用 Tab 鍵進行代碼縮進,以節約代碼大小和提高可讀性。 (調整自己的編輯器tab制表符一律以4個空格來替代)
  • 命名風格
    || || 規則 || 列如 ||
    || 類 || 混合式 || fixToTopClass ||
    || 公有方法 || 混合式 || isDate() check_password ||
    || 公有變量 || 混合式 || 列如 ||
    || 常量 || 大寫式 || 列如 ||

    * 其他建議風格 非必要
     || 結構 || 規則 || 列如 ||
     || 私有方法 || 混合式 || ||
     || 私有變量 || 混合式 || ||
     || 方法參數 || 混合式 || ||
     || 本地(local)變量 || 混合式 || ||

  • 所有語句結束后,必須使用;號結束

命名規范

基本原則:盡量避免潛在沖突;精簡短小, 見名知意。

  • 局變量以$開頭,如$user,相當於:window.$user
  • 常量全部大寫,單詞以下划線分隔,如STATIC_ROOT
  • 普通變量,采用馱峰式寫法,首字母小寫,如userIcon,UserRelation
  • 類名首字母大寫,如Object = function(){}
  • 局部變量可縮寫,命名空間,類名盡量不縮寫
  • 方法和函數,名字同普通變量名;
  • 條件表達式、正則表式式,如果很復雜,給其命名
  • 枚舉量, 同常量;
  • 私有變量, 屬性和方法, 名字以下划線開頭,如_init(),_param;
  • 保護變量, 屬性和方法, 名字同普通變量名;

注釋規范

因為基於gulp架構,jsDoc插件可以自動根據段落注釋自動生成可讀性很好的文檔,因此前端開發必須按照jsDoc的規范來寫了js注釋。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM