本文共 5593 字,大约阅读时间需要 18 分钟。
关于前端规范及工程化的分享,具体按自己实际需求而定
参考协作流程,以功能为主要自下而上的开发流程规范。
[作者]-[功能或模块]-[日期]
,如Jay-login-6.20
。git tag
打上版本标签,便于版本回退。采用提交信息规范,格式如下:
feat:新增功能; fix:修复bug; docs:修改文档; refactor:代码重构,未新增任何功能和修复任何bug; build:改变构建流程,新增依赖库、工具等(例如webpack修改); style:仅仅修改了空格、缩进等,不改变代码逻辑; perf:改善性能和体现的修改; chore:非src和test的修改; test:测试用例的修改; ci:自动化流程配置修改; revert:回滚到上一个版本;
注:
这里的type即header是必须的,body和footer可省略
使用提交信息工具(Commitizen)
npm install -g commitizen
package.json
配置scripts:"commit": "git-cz"
使用npm run commit
代替git commit
提交信息let yyyymmdd; // 错误案例
handleData() // 错误案例
使用来检查js代码
使用来检查js代码
btn(block)-text(element)-success(modifier)
g(global全局)、m(module模块)
等前缀来表示命名空间,如:g(global)-btn(block)-text(element)-success(modifier)
短横线(-)
命名,如element-variables.scss
使用来检查并修复css代码(并不是全部问题都能修复)
px、em、rem、%、s
短横线(-)
命名,如name: activity-approval
驼峰
大写命名,如SideBar.vue
prop
定义时尽量附上类型、默认值以及验证v-bind
、v-on
使用缩写:
、@
参考组件
prop
使用短横线(-)
命名,如current-row-key
event
使用短横线(-)
命名,如filter-change
method
使用驼峰
命名,如setCurrentRow
采用注释规范,以下简单案例:
/** * 节流工具函数 * @param {function} fn - 节流事件 * @param {number} wait - 规定时间 * @returns {function} fn */export const throttle = function(fn, wait) { let prev = new Date(); return function() { const args = arguments; const now = new Date(); if (now - prev > wait) { fn.apply(self, args); prev = new Date(); } };};
可根据jsdoc
配置并生成注释文档(并未实现)
使用husky
及lint-staged
来实现git钩子函数,配合代码检查及修复工具来实现git半自动化代码提交流程,现流程如下:
git add .
npm run commit
stylelint
检查并修复css代码prettier
格式化js代码eslint
来检查js代码成功
==> commitizen
提交规范化信息 失败
==> 更改代码保存再次提交所有结构分层逻辑以模块为基准,模块名均以首字母大写开头命名,如ActivityApproval
.├── README.md├── babel.config.js // babel配置文件├── package-lock.json├── package.json // 项目运行配置文件├── postcss.config.js // postcss配置文件├── .eslintignore // git忽略文件├── .eslintrc.js // eslint配置文件├── .prettierrc.js // prettier配置文件├── .stylelintrc.js // stylelint配置文件├── src // 源代码│ ├── App.vue // 根Vue文件│ ├── api // 项目api文件,存放所有服务端接口│ ├── assets // 静态资源文件│ ├── components // Vue组件文件,存放所有被使用两个及以上的组件│ ├── directives // Vue指令文件│ ├── filters // Vue过滤器文件│ ├── layout // Vue布局文件│ ├── main.js // Vue入口文件 │ ├── router // 路由文件│ ├── store // Vuex文件│ ├── styles // 全局样式文件│ ├── utils // 项目工具库│ └── views // 各页面视图文件└── vue.config.js // 项目工程文件,可设置webpack相关配置
文件结构
├── api│ └── User│ └── login.js
示例
src/api/User/login.jsimport axios from '@/utils/request';/** * 登录 * @param {object} params * @prop {string} params.username - 用户名 * @prop {string} params.password - 密码 * @returns {Promise} */export const getLoginFirstExample = params => { return axios.request({ url: `login`, method: 'get', params });};
接口方法 + 接口目的
命名文件结构
├── components│ ├── Example│ │ └── Example.vue
示例
src/components/Example/Example.vue
此文件夹存放项目中被使用两次及以上的组件
文件结构
├── directives│ ├── debounce.js│ ├── index.js│ └── throttle.js
示例
src/directives/debounce.jsimport { debounce } from '@/utils';/** * 防抖指令 v-debounce:arg.event="fn" * @param {number} arg - 防抖函数的时间参数 * @param {string} event - 目标的监听事件 如: click, scroll * @param {function} fn - 防抖函数的绑定事件 */export default { inserted: function(el, binding) { let event = Object.keys(binding.modifiers)[0]; if (event) { el.addEventListener(event, debounce(binding.value, binding.arg)); } }};
文件结构
├── filters│ ├── dateTransToTimestamp.js│ └── index.js
示例
src/filters/dateTransToTimestamp.jsimport moment from 'moment';/** * 将日期转换为时间戳过滤器 * @param {string} datestr - 日期字符串 * @returns {number} 时间戳 */const DateTransToTimestamp = datestr => { return parseInt(moment(datestr).valueOf() / 1000);};export default DateTransToTimestamp;
文件结构
├── layout│ ├── components│ │ └── SideBar.vue│ └── index.vue
layout
结构与views
相同
文件结构
├── router│ ├── index.js│ └── routes.js
路由可提供如下配置功能/** * path: 路径 * name: 路由名称 * meta: { * title: 菜单名称 * icon: 菜单图标 * lazyload: 是否懒加载 * noCache: 是否缓存 * hidden: 是否在菜单栏显示 * } */
文件结构
├── store│ ├── index.js│ └── module
使用vuex来进行数据复用,建议每个页面都配备一个vuex
文件结构
├── styles│ ├── element-ui.scss│ ├── index.scss│ ├── mixin.scss│ ├── transition.scss│ └── variables.scss
文件结构
├── utils│ ├── auth.js // 存放权限方法,如token│ ├── global.js // 存放全局函数│ ├── index.js // 根文件,存放项目工具函数│ ├── request.js // axios网络请求文件│ └── validate.js // 项目验证工具文件,如提供验证手机号等工具函数
转载地址:http://plven.baihongyu.com/