前段工程化主要目的就是提升團隊的生產效率,能夠理解爲凡事能提高團隊開發效率的規範,準則,工具啥的均可以概括到前端工程化裏面來; 最近也花了點時間把前端 team 的基本規範梳理了一下, 這裏作一下總結.
現階段我把工程化主要分爲三大部分: 規範化, 模塊化, 組件化; 針對每一個部分都要有相應的實際措施. 這一篇主要介紹規範化.javascript
1.目錄命名(小寫,複數,鏈接符)css
項目命名: project-name 樣式文件夾: styles 圖片文件夾: images 第三方庫文件夾: libs 其餘資源: assets 多個單詞的目錄名使用橫槓字符鏈接: 如 project-name
2.文件命名(小駝峯)html
index.js, commen.css, myTool.js
3.圖片資源命名(英文小寫,有意義,下劃線鏈接)前端
icon.png home_logo.png
4.vue 組件命名(小寫,鏈接符,儘可能使用多個單詞,避免與標籤重名,存在層級關係加上父級前綴)vue
news.vue news-list.vue news-list-item.vue 導入: import NewsListItem from 'components/news-list-item.vue' 使用: <news-list-item></news-list-item>
在保持功能完整的狀況下,使用最少,最少,最少的標籤,書寫遵循HTML標準,符合語義化的文檔java
5.一個 html 模塊添加註釋備註git
// 示例以下: <body> <!-- 頭部欄模塊--> <header> <nav></nav> </header> <!-- 側欄模塊 --> <aside> <nav></nav> </aside> <!-- 主體模塊: 全局只配一個 main 標籤 --> <main> <!-- 獨立文章,新聞類考慮使用article --> <article> <header>……</header> <section>……</section> <section>……</section> <section>……</section> <footer>……</footer> </article> <section>……</section> <section>……</section> </main> <!-- 底部欄模塊 --> <footer></footer> </body>
類名統一採用鏈接符形式,帶層級關係使用鏈接符進行鏈接github
// 示例以下: <div class="home"> <img class="home-logo" src="home_logo.png" alt="主頁logo"> </div>
佈局屬性聲明順序vue-cli
1.Positioning 定位 2.Box model 盒模型 3.Typographic 字體 4.Appearance 外觀 5.Other 其餘 // 示例 .block { /* Positioning */ position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 999; /* Box model */ display: flex; justify-content: flex-start; align-items: center; box-sizing: border-box; width: 100px; height: 100px; padding: 10px; border: 1px solid #e5e5e5; border-radius: 3px; margin: 10px; overflow: hidden; /* Typographic */ font-size: 14px; line-height: 1.5; text-align: center; /* Appearance */ background-color: #f5f5f5; color: #fff; opacity: .8; /* Other */ cursor: pointer; }
命名符合語義化npm
can 判斷是否可執行某個動做 has 判斷是否含有某個值 is 判斷是否爲某個值 get 獲取某個值 set 設置某個值 示例: //是否可閱讀 function canRead(){ return true; } //獲取姓名 function getName{ return this.name }
變量命名: 使用有含義的變量名,統一採用駝峯命名,常量使用全大寫+下劃線
let homeTitle = '主頁' const SECONDS_IN_ONE_DAY = 24 * 60 * 60
對象簡寫,推薦字面量寫法
const name = 'leo' const age = 26 function work() {...} const person = { name, age, work }
在須要使用對象的多個屬性時,使用解構賦值
const obj = { foo: 'foo', bar: 'bar', baz: 'baz' } const { foo, bar, baz } = obj
文件註釋 用於告訴不熟悉這段代碼的讀者這個文件中包含哪些東西, 提供文件的大致內容, 它的做者, 依賴關係和兼容性信息
示例: 如 filter.js 文件 /** * @description {項目中的業務工具函數, 處理字符過濾,格式轉化} * @author {huhua} * @date {2019-08-30}
函數,方法,類註釋包含參數說明,返回值以及做用和用法
示例: * @description 兩數之和 * @param {number} x 參數的說明 * @param {number} y 參數的說明 * @return {number} 返回值的說明
function sumOfTwoNumber(x,y) { return x + y }
推薦使用函數式編程方式
const programmerOutput = [ { name: 'Uncle Bobby', linesOfCode: 500 }, { name: 'Suzie Q', linesOfCode: 1500 }, { name: 'Jimmy Gosling', linesOfCode: 150 }, { name: 'Gracie Hopper', linesOfCode: 1000 } ]; const totalOutput = programmerOutput .map(output => output.linesOfCode) .reduce((totalLines, lines) => totalLines + lines, 0)
vue組件模板標籤順序
<template> 模塊之間記得添加註釋區分 </template>
<script> methods中的業務邏輯記得添加註釋 </script>
<style> 根據 template 模塊添加註釋區分; 交互樣式注意添加註釋(在模板中動態導入的) </style>
組件屬性換行,屬性的書寫順序
順序: 類名 > ref > v-model > 屬性傳值 > 方法
示例: <photo-upload class="photo-upload" ref="upload" v-model="files" :max="4" :auto="false" :action="action" :simultaneous-uploads="1" @files-added="handleAdded" @file-success="handleSuccess" @file-click="handleClick" @file-error="handleError" > </photo-upload>
script 標籤內部聲明順序; 聲明規範; props 完整性
示例: import NewsListItem from "@/components-base/news-list-item"; import { scrollMixin } from "@/mixins/scrollMixin"; const COMPONET_NAME = 'news-list'; export default { name: COMPONET_NAME, props: { name: { type: String, default: 'huahua', required: false } }, mixins: [scrollMixin], components: { NewsListItem }, data() { return {} }, 生命週期鉤子順序: created > mounted > ... > destroyed methods: {}, computed: {}, watch: {}, 組件路由鉤子函數 }
style 標籤內儘可能使用 scoped屬性
<style lang="scss" scoped></style>
props配置: 每一個配置項必須有註釋說明
props: { // 用戶名字 name: { type: String, default: 'huahua', required: false }, // 年齡 age: { type: Number, default: 18 } },
- 分支管理: master:主分支; online: 線上發佈分支; dev: 測試環境分支; huhua_dev: 本地我的開發分支: 本身的名字_dev; - 多人合做: 注意提交以前先拉取其餘人更新的代碼再合併提交! - commit message規範(能夠強制作提交預檢) add:'添加新功能' fix:'修補bug' docs:'文檔(documentation)' refactor:'重構(即不是新增功能,也不是修改bug的代碼變更, 推翻重寫' test:'增長測試' update:'更改代碼'
1.項目建立(採用 vue-cli3)
vue create project-name
配置項選擇: Babel, Router, Vuex, CSS-Pre-processors, Linter, Unit Testing
項目地址: 腳手架目錄配置
2.目錄結構建立,見項目