├── 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 // 地址
每一個包單獨一個文件夾,目的是:方便一個包多版本存放
如:jQuery 的 1.x 跟 2.x , 2.x 是針對移動版javascript
path
環境變量中npm install -g cnpm --registry=http://r.cnpmjs.org
cnpm
npm install -g gulp
,安裝 gulp
全局支持npm install
(使用國外鏡像) 或 cnpm install
(使用國內鏡像)-- enjoy --
php
npm install
(使用國外鏡像) 或 cnpm install
(使用國內鏡像)如下操做,需進入
FeBuilder
的解壓目錄目錄下執行css
gulp
dist
目錄生成對應的壓縮 jsdoc
目錄,根據 jsdoc
格式,生成文檔css/sprite
目錄,若是有新 sns
文件,自動生成雪碧圖注:若是添加新目錄,需從新執行該指令,不然新目錄不會監控html
gulp sprite
生成雪碧圖gulp script
壓縮,合併,打包jsgulp less
編譯less文件gulp watch
HTML
、 CSS
和 JS
等。JSON
的格式進行數據交換,那麼前端開發徹底就能夠本地模擬一個 .json
格式的文件來進行開發調試。JSON
的本地模擬數據,在與後端的同事溝通約定後,只須要對方API返回的數據結構和本地模擬的一致便可。CSS Sprites就是把網頁中一些背景圖片整合到一張圖片文件中,再利用CSS的background-image,background-repeat,background-position的組合進行背景定位,background-position能夠用數字精確的定位出背景圖片的位置。利用CSS Sprites能很好地減小網頁的http請求,從而大大的提升頁面的性能,這也是CSS Sprites最大的優勢。
前端
Javascripthtml5
爲了項目更容易管理和團隊協做,js的開發須要以模塊化的方式進行。
在ve_2_1/js/src
目錄下創建按照功能模塊的不一樣,來創建文件夾及js文件java
ve_2_1/js/dist
目錄,在頁面中須要配合require.js(js依賴管理)和config.js(依賴的配置文件)來加載自動壓縮後的js。config.dev.js
、config.test.js
、config.release.js
和config.js
分別對應 開發環境
、測試環境
、預生產環境
和生產環境
。{php echo init_js();}
(後端php同事要預先封裝好init_js
函數)來動態輸出便可。*** 舉例:node
ve雙城首頁的js,咱們就創建在 js/src/web 目錄下,並命名爲index.js,它依賴於'jquery.slide', 'web/common', 'web/timer'和jquery,而'jquery.slide', 'web/common', 'web/timer'也依賴於jqeury,jquery已被全局化,那麼index.js應該是這樣的:jquery
index.js
: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應該是這樣的:web
common.js
: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中定義的$
符號。
<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 -->
必須加上如下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 項,是在移動端上,指定頁面的縮放比例
開始和結束均須要帶有可識別的class或id,結束時則加斜槓 /(表示標籤閉合了)。
<!-- 商品標題 --> <div class="breadcrumb"> <a href="">惟一優品首頁</a> > <a href="">名品特賣</a> > <a href="">新安怡夏季大促</a> > <a href="" class="title">新安怡 嬰兒保溼潤膚乳液(200ml)</a> </div> <!-- 商品標題end -->
<head>
內</body>
結束前(儘量的放底部),盡情避免在 <head>
內插入 jsscript 標籤是阻塞式加載的。 若是一個 js 文件 比較大,或者 404 ,這將阻塞後面部份內容的加載
<!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>
/*頭註釋*/ /*------------------------------------------------ @Filename: ve_goods @Description: 產品內頁 ------------------------------------------------*/ //商品屬性區塊 //產品顏色選擇 /*爆款*/
命名風格
|| || 規則 || 列如 ||
|| 類 || 混合式 || fixToTopClass ||
|| 公有方法 || 混合式 || isDate() check_password ||
|| 公有變量 || 混合式 || 列如 ||
|| 常量 || 大寫式 || 列如 ||
* 其餘建議風格 非必要
|| 結構 || 規則 || 列如 ||
|| 私有方法 || 混合式 || ||
|| 私有變量 || 混合式 || ||
|| 方法參數 || 混合式 || ||
|| 本地(local)變量 || 混合式 || ||
全部語句結束後,必須使用;
號結束
基本原則:儘可能避免潛在衝突;精簡短小, 見名知意。
由於基於gulp架構,jsDoc插件能夠自動根據段落註釋自動生成可讀性很好的文檔,所以前端開發必須按照jsDoc的規範來寫了js註釋。