序言
為了統一前端的技術棧問題,技術開發二部規定開發技術必須以Vue為主。
為了更好的規范公司的前端框架,現以我前端架構師為主,編寫以下開發規范,如有不當的地方,歡迎批評教育並慢慢改善該開發文檔,謝謝合作。
我們在做產品不只是實現功能,還要考慮到以后的優化升級,那么就需要一套標准的代碼規范,使得代碼易懂,養成代碼規范的習慣,有助於程序員自身的成長。那么我們現在就來談談,前端代碼的規范。
一、編碼規范
1、樣式文件命名說明
注:【css處理程序統一使用stylus,並放在“src/common/stylus”目錄下】
(1)重置樣式:reset.stylus
(2)基礎布局樣式:base.stylus
(3)公共樣式:public.stylus
(4)變量樣式:variable.stylus
(5)icon樣式:icon.stylus
(6)混合類型(函數樣式):mixin.stylus
2、樣式規范化
(1)連字符CSS選擇器命名規范
長名稱或詞組可以使用“中橫線”來為選擇器命名。 不建議使用“_”下划線來命名CSS選擇器,例:class=”page page-index”。
(2)使用16進制表示顏色值,除非表示的是透明度,例:#F62AB5
(3)以下常用的css命名規則;
page-hd、page-bd、page-ft、tit、cnt、desc、info、left-bar、search-bar
3、文件目錄
(1)存放其它圖片文件夾命名規范:imgaes
(2)存放廣告圖的文件夾banner
(3)文件名應該全部小寫,多個單詞以下划線“_”分開
(4)JS文件:駝峰命名方式,首字母小寫,例:getUserInfo.js
(5)確保文檔或模板中只包含html,把用到的樣式都寫到樣式表文件中,把腳本都寫到js文件中,采用外鏈引入形式,使頁面的結構與行為分離。
4、 Javascript
(1)因vue腳手架有自動編譯的功能,為了代碼的整潔,每行js代碼不必帶“;”作為結束,但需遵循一個語句一行的編碼方式;
5、命名規范
(1)文件命名:以英文命名,后綴為.js,例:(共用)common.js,其他命名可根據模塊需求命名;
(2)變量命名:駝峰式命名,原生JavaScript變量要求是純英文字母, 首字母須小寫,變量集中聲明, 避免全局變量
(3)類命名:首字母大寫, 駝峰式命名。eg:StudentInfo、UserInfo、ProductInfo;
(4)函數命名:首字母小寫駝峰式命名。eg:getUserInfo;
(5)命名語義化,盡可能利用英文單詞或其縮寫。
(6)常量:必須采用全大寫的命名,且單詞以_分割,常量通常用於ajax請求url,和一些不會改變的數據;
命名規范:使用大寫字母和下划線來組合命名,下划線用以分割單詞。
例:const MAX_LENGTH = 20;const URL = 'http://www.star.com'
(7)變量:必須采用小駝峰式命名法,例:let maxCount = 10;
6、項目命名
全部采用小寫方式, 以下划線分隔。例:my_project_name
7、函數
命名方法:小駝峰式命名法;
命名規范:前綴應當為動詞;
命名建議:可使用常見動詞約定。
動詞 |
含義 |
返回值 |
can |
判斷是否可執行某個動作(權限) |
函數返回一個布爾值。true:可執行;false:不可執行 |
has |
判斷是否含有某個值 |
函數返回一個布爾值。true:含有此值;false:不含有此值 |
is |
判斷是否為某個值 |
函數返回一個布爾值。true:為某個值;false:不為某個值 |
get |
獲取某個值 |
函數返回一個非布爾值 |
set |
設置某個值 |
無返回值、返回是否設置成功或者返回鏈式對象 |
load |
加載某些數據 |
無返回值或者返回是否加載完成的結果 |
8、類 & 構造函數
命名方法:大駝峰式命名法,首字母大寫;例:Person
命名規范:前綴為名稱。
示例:
class Person {
public name: string;
constructor(name) {
this.name = name;
}
}
const person = new Person('mevyn');
9、類的成員
類的成員包含:
公共屬性和方法:跟變量和函數的命名一樣。
私有屬性和方法:前綴為_(下划線),后面跟公共屬性和方法一樣的命名方式。
示例:
class Person {
private _name: string;
constructor() { }
// 公共方法
getName() {
return this._name;
}
// 公共方法
setName(name) {
this._name = name;
}
}
const person = new Person();
person.setName('star');
person.getName(); // ->'star'
10、注釋規范
js 支持三種不同類型的注釋:行內注釋、單行注釋和多行注釋:
- 行內注釋
- 說明:行內注釋以兩個斜線開始,以行尾結束。
- 語法:code // 這是行內注釋
- 使用方式://(雙斜線)與代碼之間保留一個空格,並且//(雙斜線)與注釋文字之間保留一個空格。
命名建議:
// 用來顯示一個解釋的評論
// -> 用來顯示表達式的結果,
// >用來顯示 console 的輸出結果,
示例:
function test() { // 測試函數
console.log('Hello World!'); // >Hello World!
return 3 + 2; // ->5
}
- 單行注釋
- 說明:單行注釋以兩個斜線開始,以行尾結束。
- 語法:// 這是單行注釋
- 使用方式:單獨一行://(雙斜線)與注釋文字之間保留一個空格。
示例:
// 調用了一個函數;1)單獨在一行setTitle();
- 多行注釋
- 說明:以 /* 開頭, */ 結尾
- 語法:/* 注釋說明 */
- 使用方法:若開始/和結束/都在一行,推薦采用單行注釋。若至少三行注釋時,第一行為/,最后行為/,其他行以開始,並且注釋文字與保留一個空格。
示例:
/** 代碼執行到這里后會調用setTitle()函數* setTitle():設置title的值
*/
setTitle();
- 函數(方法)注釋
說明:函數(方法)注釋也是多行注釋的一種,但是包含了特殊的注釋要求,參照JSDoc
語法:
/** * 函數說明 * @關鍵字
*/
常用注釋關鍵字:(只列出一部分,並不是全部)
注釋名 |
語法 |
含義 |
示例 |
@param |
@param 參數名 {參數類型} 描述信息 |
描述參數的信息 |
@param name {String} 傳入名稱 |
@return |
@return {返回類型} 描述信息 |
描述返回值的信息 |
@return {Boolean} true:可執行;false:不可執行 |
@author |
@author 作者信息 [附屬信息:如郵箱、日期] |
描述此函數作者的信息 |
@author 張三 2015/07/21 |
@version |
@version XX.XX.XX |
描述此函數的版本號 |
@version 1.0.3 |
@example |
@example 示例代碼 |
演示函數的使用 |
@example setTitle(‘測試’) |
/*** 合並Grid的行
* @param grid {Ext.Grid.Panel} 需要合並的Grid
* @param cols {Array} 需要合並列的Index(序號)數組;從0開始計數,序號也包含。
* @param isAllSome {Boolean} :是否2個tr的cols必須完成一樣才能進行合並。true:完成一樣;false(默認):不完全一樣
* @return void
* @author polk6 2015/07/21
* @example
* _________________ _________________
* | 年齡 | 姓名 | | 年齡 | 姓名 |
* ----------------- mergeCells(grid,[0]) -----------------
* | 18 | 張三 | => | | 張三 |
* ----------------- - 18 ---------
* | 18 | 王五 | | | 王五 |
* ----------------- -----------------
*/
function mergeCells(grid: Ext.Grid.Panel, cols: Number[], isAllSome: boolean = false) {
// Do Something
}
11、手機設計稿規范
設計稿的寬度一般情況下為寬度750px,在手機端頁面編寫的過程,將頁面的最大寬度設置為750px,最小寬度為375xp,寬度為100%;即min-width:375px;max-width:750px;width100%;這樣一來的話寬度在375到750之間是自適應的,當頁面小於375時出現水平滾動條,當頁面大於750時頁面居中布局。
二、vue框架推薦
小程序:mpvue框架
H5游戲:vue
H5的UI框架:vux
推廣類seo優化,如新聞,博客:nuxt.js
UI:element
APP:weex、Flutter
開發環境版本建議
技術 |
版本 |
查看命令 |
node |
8.12.0 |
node-v |
vue |
2.5.17 |
vue -V(大寫) |
npm |
6.4.1 |
npm -v |
webpack |
4.19.1 |
webpack -v |
nuxt |
2.00 |
/ |
Element-ui |
2.47 |
/ |