Skip to content
  • Projects
  • Groups
  • Snippets
  • Help

马贞晓 / templateVUE

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Repository
  • Issues 0
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Settings
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Home

Home

Last edited by 马贞晓 Nov 01, 2019
Page History

VUE项目前端规范

前端采用vue-cli3,技术栈为 vue+vuex+vue-router+axios+(vant||antd)作为基础框架,开发使用es6 & typescript语言、服务端模拟数据返回为mockerjs。

所有项目必须建立readme.md文档,并对当前项目使用的情况进行必要介绍,必须包含当前插件说明及api地址

模块目录

public目录webpack不会对其下文件进行处理,如在线数据需要变量形式使用静态文件可以使用此目录,引入方式如:

base:process.env.BASE_URL  //data中设置引入环境变量

:src="`${base}/image/no-data.png`"  //变量
  • src -> assets 为静态文件如图片文字等
  • components 为公共组件,view中可以通用等放在此处
  • entry 多页面入口
  • less/sass 公共less或sass存放
  • router 路由
  • service 服务端请求
  • store vuex数据存放
  • utils 工具类
  • views 视图页面

├── public                  //公共目录
│   ├── image               //图片-webpack不做处理
│   └── pdf                 //其他类型如pdf
└── src
    ├── assets              //静态文件目录如图片-webpack压缩处理
    │   └── img
    ├── components          //公共组件    
    │   └── Layout          //页面统一入口Layout,内部饱含router-view用来处理统一头部,尾部等三联结构/
    ├── entry               //多页面入口
    ├── less                //公共less
    ├── router              //公共路由
    ├── service             //公共http请求处理
    │   └── mocker          //默认mocker处理文件
    ├── store               //vuex存储处理
    │   └── login           //如登录页面
    ├── utils               //工具
    └── views               //视图层处理
        ├── Index           //示例
            ├── HotItem
            └── TabMenu

文件引入规范

  1. 页面中引入文件,以vue为例,同类型文件应分组引入。

如引入components 组件则在页面中

view页

//非同名,一般用做组件模块
import {
    SearchBox,
} from "./includeComponent.js"

//同名,一般用作服务器请求模块
import $http from "./includeServer";

引入页

// 非同名文件,一般用做组件模块
  import SearchBox from "@/views/Recommend/SearchBox/index.vue";

export {
    SearchBox,
} 

//同名文件,一般用作服务器请求模块
import $MenuList from "@/service/MenuList/index.js";
import $BannerList from "@/service/BannerList/index.js";


export default {
    $MenuList,
    $BannerList,
}

文件名、模块名,命名规范

  • 文件名称与模块名称采用帕斯卡命名法,即单词首字母大写[示例:IndexPage]
  • 模块名称与文件夹名称应使用相同名称,增加可读性、模块默认js使用index命名,页面引入默认index.js文件应使用默认加载方式如加载:import SearchBox from "@/views/Recommend/SearchBox/index.vue";应简写做 import SearchBox from "@/views/Recommend/SearchBox 。
  • 模块引入当前文件夹文件使用路径./ 引入其他文件下路径使用@+文件路径,@指向src目录

环境变量名称规范

环境变量在.env本地(.git忽略) .env.development(测试).env.production(发布)中设置,命名采用 VUE_APP_xxx的命名方式,自定义名称在xxx部分,禁止使用驼峰、$开口命名方式,防止跟默认及本地全局型变量冲突,使用大些命名。

js规范

  • 使用let命名变量,
  • 私有变量使用xx前后加下划线的方式命名
  • 使用帕斯卡命名
  • 公共变量使用$开头命名如$http
  • server文件命名使用与接口名称相同命名
  • vuex mutations使用M开头命名
  • vuex actions 使用A开头命名

less使用规范

  • 简洁明了,驼峰命名,首字母小写
  • 名称:总模块+父模块+自己、父模块+自己、简写总+父 +自己
  • 使用scoped 控制当前域下less名称,嵌套使用加入/deep/ XXX来防止名称被修改后找不到类。
  • 公共变量放入公共less文件夹declear.less下
  • animate动作放入统一文件下
  • 如页面中存在大量的less比如大于100行则应该单独引入
  • 单独引入less命名应放入当前模块文件less文件夹下名称应与模块名称相同或名称能概括与模块的关系。
  • 按照模块结构写less机构,并增加是模块中某个功能说明

示例

/* 设置持续时间和动画函数 */
.slide-fade-enter-active {
    transition: all .3s ease;
  }
  .slide-fade-leave-active {
    transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
  }
  .slide-fade-enter, .slide-fade-leave-to
   {
    transform: translateX(10px);
    opacity: 0;
  }

component模块规范

  • 名称采用帕斯卡命名规范
  • 公共模块注释使用vscode中Document注释规范
  • 和父组件紧密耦合的子组件应该以父组件名作为前缀命名。
  • 在单文件组件中没有内容的组件应该是自闭合的。
  • 事件命名示例:EventClickOpenFile 以Event+事件+作用名帕斯卡命名方式命名
  • 模块函数,帕斯卡命名方式
  • 所有函数必须添加注释及参数说明,使用vscode的Document插件或手写规范。
  • 外部ui组件引入应按需引入,避免全部引入造成打包过大。
  • 外部ui组件引入应统一使用其他component组件引入方式:例如includeComponent.jsn内统引入并export所有已用ui组件,方便统一管理及二次封装。
  • props 必须强制使用默认值设置,并在文件头部说明使用方式
  1. props 设置
 props:{
      name:{
         type:String,
         default:"name",
         required:false,
         validator: function (value) {
          return true
        }
      }
    },
  1. 注释文档
/**
 * @name 刷新模块
 * @param {name} String 名称设置
 * @template <PullRefreshList 
 *            name="name"
 *            ></PullRefreshList>
 */

vuex 规范

  • 除非全局通用或多模块交互,其他无需求不使用vuex,组件间非复杂传值使用.sync / emit / props / inject 方式交互。
  • mutations 使用M开头命名
  • actions 使用A开头命名
  • 必须设置 namespaced:true,
  • 建议使用 MPSet(state,data){state[data.state]=data.data}方式通用处理对应state,复杂业务逻辑除外。

示例

//岗位
import $http,{URL} from "@/service/Service";

export default {
    namespaced:true,
    state: {
       List:[], //列表数据
       CurretIndex:1//初始值
    },
    getters:{

    },
    mutations:{
       MPSet(state,data){
            state[data.state]=data.data
       }
    },
    actions:{
        /**
         * @name 获取tabs列表
         * @parma {params} Array 设置xxxx
         */
        AGetTabsList({dispatch,commit,state,computed},params){

         return $http.GetTabsList("/GetTabsList")
                     .then(data=>{
                         commit("MPSet",{state:"List",data})

                        return data;
                     })
       }
    }
}

vue-router路由设置规范

  • router组件应区分各个频道,框架要清晰明了,不在一个页面内引入过多对象,造成页面不易阅读,
  • 模块引入方式使用webpack异步引入方式import( /* webpackChunkName: "AppMenu" */ '@/components/Layout/xxx')。webpackChunkName不应出现重复
  • 使用exact:true 做精确匹配。

示例

import Vue from 'vue'
import Router from 'vue-router'
import pubIndex from "./index";
import pubVideo from "./video";
import pubMall from "./mall";
import pubMe from "./my";

Vue.use(Router)
const Routers = new Router({
    mode: "hash",
    routes: []
})

Routers.addRoutes(pubIndex);
Routers.addRoutes(pubVideo);
Routers.addRoutes(pubMall);
Routers.addRoutes(pubMe);
export default Routers;

ts 规范

  • 使用'vue-property-decorator'组件开发
  • interface 需加注释说明哪个模块使用及功能说明
  • decorator 装饰器语法必须增加模块说明

git规范

  • 在本地建立以自己名称命名的分支
  • 切换到master分支后应该先pull服务器数据,防止后面到代码冲突和覆盖。
  • git commit 必须清晰描述当前任务
  • git stash 暂存前清除当前history 暂存后list查看是否存储,防止任务丢失。
  • git merge后查看是否有冲突并处理冲突后运行看下涉及冲突页面。
  • 非必须不实用push -f 强制提交覆盖服务器仓库。
  Clone repository
  • Home
More Pages
×

New Wiki Page

Tip: You can specify the full path for the new file. We will automatically create any missing directories.