vue项目规范
一.核心目录分工
- 目录结构
│ index.html // 首页入口页面。可以配置一些meta信息或者统计代码。│ package-lock.json // 记录一次本地安装的包版本的所有信息,包括版本号和依赖。本地安装时,如果有该文件,会先按照该文件安装npm包。│ package.json // 本地安装时,项目所需要的npm包。│ README.md // 项目的说明文档,markdown 格式├─build // 编译配置目录。├─config // 配置目录。│ dev.env.js // 开发环境文件。│ index.js // 配置生产环境、开发环境、端口号等。│ prod.env.js // 生产环境文件。├─node_modules // npm加载的项目依赖模块,无需提交到git仓库。└─src // 开发目录│ App.vue // 项目入口文件。非必要不允许修改。│ main.js // 项目核心js文件。主要用于初始化vue实例以及引入一些全局组件。├─api // 项目接口调用配置,非必要不允许修改。├─assets // 项目静态文件目录。│ ├─css // 样式文件。│ ├─images // 图片。│ └─js├─components // 页面组件目录。├─config // 配置文件。环境配置+api配置+url配置+键盘事件配置。├─pages // 页面入口文件目录。├─router // 路由配置。├─store // vuex配置。│ │ index.js // 配置文件,用来组装模块和导出store。│ └─modules // 模块目录。└─util // 存放公共js目录。
- pages&compnents目录
- pages:页面入口文件目录,router目录中引入的页面路径。该文件应尽量保持整洁易读,遇到比较复杂的页面,可以引入组件去写。
- compnents:组件目录。公共的组件可放在common文件夹中,其他的组件按照功能不同,分到不同的文件夹中。
- ps:文件命名统一使用驼峰形式。
二.顺序规范
- 组件/实例顺序(列举了项目中比较常用的组件/实例,详细请看)
{name: 'tradeDetail',/** 模板依赖 **/components: {},directives: {},/** 组合 **/mixins: [listMix],/** 接口 **/props: {},/** 本地状态 **/data: {return {}},computed: {},/** 事件 **/watch: {},/** 生命周期 **/beforeCreate () {},created () {},beforeMount () {},mounted () {},beforeUpdate () {},updated () {},activated () {},deactivated () {},beforeDestroy () {},destroyed () {},/** 非响应式的属性 **/methods: {}}
- html标签中元素特性/属性顺序
<divclass=""is=""v-for="(item, index) in list"v-if/v-else-if/v-else=""v-show=""v-cloak=""v-prev-onceid=""ref="":key=""slot=""v-model=""组件本身支持的特性/属性v-on:click/submit=""v-html=""v-text=""></div>
三.html代码规范<template>
- 属性等号后面全统一使用双引号,如果双引号中有字符串拼接,就用单引号包字符串。例如
<el-dialog :title="'编辑优惠券' + title" :visible.sync="isShow"> - 缩进2个空格。缩进没有报错,但是自己得注意缩进。
- 所有运算符两边都要有空格,根据js的标准来。
- v-show、v-if的使用。
v-show:需要频繁切换的使用。
v-if:初始化渲染后不太会改变的。
ps:v-show 不支持<template>元素,也不支持 v-else。在element-ui部分组件中也会失效。 - v-for 一定要有键值 key。
- v-for和v-if尽量避免在一个html标签中使用。如果同时使用,v-for的优先级大于v-if。
- 静态资源引用使用绝对路径,如:”~assets/xxx.png”,禁止使用相对路径,如:”../../xx.png”。
- 指令缩写。组件中
v-bind:value用:value代替;v-on:focus用@focus代替。
四.js代码规范<script>
- 字符串赋值统一使用单引号。
- this复制统一使用
let that = this。 - vue中变量定义声明用let或const。
- 临时变量统一使用驼峰形式命名。
五.css规范<style>
- 页面中样式尽量写在
<style scoped></style>中,避免引起多页面样式被覆盖。 <style></style>中的样式都需要加上父元素class,且这个父元素class在所有页面中必须是唯一的。- 覆盖饿了么组件样式时,统一加上父元素class。
六.vue相关
- 组件文件中必须包含name,name必须是由多个单词组成,并且是驼峰形式。
- 组件中的prop变量统一使用驼峰形式。
- prop定义要尽量详细。例如:
propE: {type: Object,// 对象或数组默认值必须从一个工厂函数获取default: function () {return { message: 'hello' }}}
七.vue-router
所有的vue项目,统一使用路由懒加载。例如:
{path: '(dealer/)?trade/details/:id',name: 'tradeDetail', // 订单详情component (resolve) {require(['@/pages/trade/Details.vue'], resolve)}}
八.关于静态资源(图片)的使用
1.img标签中直接使用本地静态图片。
<img src="~assets/images/icon-payment-WeChat.png"/>
2.import或者require中引入本地静态图片。
import iconAalipay from '@/assets/images/icon-payment-Alipay.png'data () {return {imgUrl: require('@/assets/images/icon-payment-Alipay.png')}}
3.样式background中使用的本地静态图片。
background:url(~assets/images/icon-item-grid-selected.png)

浙公网安备 33010602011771号