uni-app 开发规范

章节介绍

开发规范是团队开发中的重要组成部分,它可以帮助开发者保持代码风格一致,提高代码可读性和可维护性,减少团队协作中的摩擦。对于 uni-app 这样的跨平台框架,开发规范尤为重要,因为需要确保代码在多个平台上都能正常运行。本章节将介绍 uni-app 应用的开发规范,包括代码规范、命名规范、目录结构规范等。

核心知识点

1. 代码规范

代码规范是开发规范的核心,它包括代码风格、缩进、注释等方面的规定。在 uni-app 开发中,建议采用以下代码规范:

1.1 基础代码规范

  • 缩进:使用 2 个空格进行缩进
  • 行宽:每行代码不超过 100 个字符
  • 分号:语句结束后添加分号
  • 引号:字符串使用单引号,模板字符串使用反引号
  • 空格:在操作符前后、逗号后添加空格

1.2 Vue 代码规范

  • 组件命名:使用 PascalCase 命名组件,例如 MyComponent
  • 属性命名:使用 kebab-case 命名组件属性,例如 :user-name
  • 指令缩写:使用指令缩写,例如 @click 代替 v-on:click
  • 模板表达式:模板中的表达式保持简洁,复杂逻辑应在计算属性或方法中处理
  • 计算属性:将复杂的模板表达式提取为计算属性

1.3 JavaScript 代码规范

  • 变量命名:使用 camelCase 命名变量和函数,例如 userName
  • 常量命名:使用 UPPER_CASE 命名常量,例如 MAX_COUNT
  • 函数声明:使用函数声明或箭头函数,避免使用函数表达式
  • 解构赋值:优先使用解构赋值,例如 const { name, age } = user
  • 扩展运算符:使用扩展运算符进行对象和数组的浅拷贝,例如 const newObj = { ...oldObj }

2. 命名规范

命名规范是开发规范的重要组成部分,它包括文件命名、组件命名、变量命名等方面的规定。在 uni-app 开发中,建议采用以下命名规范:

2.1 文件命名

  • 页面文件:使用 kebab-case 命名,例如 home-page.vue
  • 组件文件:使用 PascalCase 命名,例如 MyComponent.vue
  • 工具文件:使用 camelCase 命名,例如 utils.js
  • 样式文件:使用 kebab-case 命名,例如 home-page.scss

2.2 组件命名

  • 组件名称:使用 PascalCase 命名,例如 MyComponent
  • 组件标签:使用 kebab-case 命名,例如 <my-component>
  • Props 命名:使用 camelCase 命名 Props,例如 userName
  • 事件命名:使用 kebab-case 命名事件,例如 @user-click

2.3 变量和函数命名

  • 变量名:使用 camelCase 命名,例如 userName
  • 函数名:使用 camelCase 命名,例如 getUserInfo()
  • 类名:使用 PascalCase 命名,例如 UserService
  • 常量名:使用 UPPER_CASE 命名,例如 MAX_COUNT
  • 枚举名:使用 PascalCase 命名,例如 UserStatus

3. 目录结构规范

目录结构规范是开发规范的重要组成部分,它包括项目目录结构、文件组织等方面的规定。在 uni-app 开发中,建议采用以下目录结构规范:

3.1 基础目录结构

├── src/
│   ├── components/         # 公共组件
│   ├── pages/              # 页面
│   ├── static/             # 静态资源
│   ├── store/              # 状态管理
│   ├── services/           # 服务层
│   ├── utils/              # 工具函数
│   ├── config/             # 配置文件
│   ├── mixins/             # 混入
│   ├── filters/            # 过滤器
│   ├── directives/         # 指令
│   ├── router/             # 路由配置
│   ├── App.vue             # 根组件
│   └── main.js             # 入口文件
├── unpackage/              # 打包输出目录
├── package.json            # 项目配置
├── project.config.json     # 项目配置
├── vue.config.js           # Vue 配置
└── .eslintrc.js            # ESLint 配置

3.2 页面目录结构

├── pages/
│   ├── home/
│   │   ├── home.vue        # 页面组件
│   │   ├── components/     # 页面级组件
│   │   ├── utils/          # 页面级工具
│   │   └── styles/         # 页面级样式
│   └── detail/
│       ├── detail.vue      # 页面组件
│       ├── components/     # 页面级组件
│       ├── utils/          # 页面级工具
│       └── styles/         # 页面级样式

3.3 组件目录结构

├── components/
│   ├── MyComponent/
│   │   ├── MyComponent.vue     # 组件文件
│   │   ├── index.js            # 组件导出
│   │   ├── styles/             # 组件样式
│   │   └── utils/              # 组件工具
│   └── AnotherComponent/
│       ├── AnotherComponent.vue    # 组件文件
│       ├── index.js                # 组件导出
│       ├── styles/                 # 组件样式
│       └── utils/                  # 组件工具

4. 注释规范

注释规范是开发规范的重要组成部分,它可以帮助开发者理解代码的功能和实现逻辑。在 uni-app 开发中,建议采用以下注释规范:

4.1 单行注释

  • 使用 // 进行单行注释
  • 注释内容与 // 之间添加一个空格
  • 注释应放在被注释代码的上方或右侧

4.2 多行注释

  • 使用 /* */ 进行多行注释
  • 多行注释应包含注释内容、作者、日期等信息
  • 多行注释应放在文件顶部或函数顶部

4.3 文档注释

  • 使用 JSDoc 风格的文档注释
  • 文档注释应包含函数说明、参数说明、返回值说明等信息
  • 文档注释应放在函数或类的上方

5. 提交规范

提交规范是开发规范的重要组成部分,它可以帮助开发者保持提交信息一致,提高代码仓库的可读性。在 uni-app 开发中,建议采用以下提交规范:

5.1 提交信息格式

<type>(<scope>): <subject>

<body>

<footer>
  • type:提交类型,包括 feat(新功能)、fix(修复)、docs(文档)、style(样式)、refactor(重构)、test(测试)、chore(构建)等
  • scope:提交范围,例如页面、组件、工具等
  • subject:提交主题,简要描述提交内容
  • body:提交正文,详细描述提交内容
  • footer:提交脚注,包括 BREAKING CHANGE(破坏性变更)、Closes(关闭 issue)等

5.2 提交示例

feat(home): 添加首页轮播图功能

- 实现轮播图组件
- 添加轮播图数据接口
- 优化轮播图动画效果

Closes #123

实用案例

案例:制定团队开发规范

1. 代码规范配置

使用 ESLint 和 Prettier 配置代码规范:

1.1 安装依赖
npm install --save-dev eslint prettier @vue/eslint-config-prettier @vue/eslint-config-standard eslint-plugin-vue
1.2 配置 ESLint

创建 .eslintrc.js 文件:

// .eslintrc.js
module.exports = {
  root: true,
  env: {
    node: true
  },
  extends: [
    'plugin:vue/essential',
    '@vue/standard',
    '@vue/prettier'
  ],
  parserOptions: {
    parser: 'babel-eslint'
  },
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'vue/max-attributes-per-line': ['error', {
      singleline: 10,
      multiline: {
        max: 1,
        allowFirstLine: false
      }
    }],
    'vue/component-name-in-template-casing': ['error', 'PascalCase']
  }
}
1.3 配置 Prettier

创建 .prettierrc.js 文件:

// .prettierrc.js
module.exports = {
  singleQuote: true,
  semi: true,
  trailingComma: 'es5',
  printWidth: 100,
  tabWidth: 2
}

2. 目录结构规范

制定项目目录结构规范:

├── src/
│   ├── components/         # 公共组件
│   │   ├── base/           # 基础组件
│   │   └── business/       # 业务组件
│   ├── pages/              # 页面
│   │   ├── home/           # 首页
│   │   ├── detail/         # 详情页
│   │   └── user/           # 用户页
│   ├── static/             # 静态资源
│   │   ├── images/         # 图片
│   │   ├── icons/          # 图标
│   │   └── fonts/          # 字体
│   ├── store/              # 状态管理
│   │   ├── modules/        # 模块状态
│   │   └── index.js        # 状态管理入口
│   ├── services/           # 服务层
│   │   ├── api/            # API 接口
│   │   └── utils/          # 服务工具
│   ├── utils/              # 工具函数
│   │   ├── common/         # 通用工具
│   │   └── platform/       # 平台工具
│   ├── config/             # 配置文件
│   │   ├── api.js          # API 配置
│   │   └── app.js          # 应用配置
│   ├── mixins/             # 混入
│   ├── filters/            # 过滤器
│   ├── directives/         # 指令
│   ├── App.vue             # 根组件
│   └── main.js             # 入口文件
├── unpackage/              # 打包输出目录
├── package.json            # 项目配置
├── project.config.json     # 项目配置
├── vue.config.js           # Vue 配置
├── .eslintrc.js            # ESLint 配置
└── .prettierrc.js          # Prettier 配置

3. 命名规范示例

制定具体的命名规范:

3.1 组件命名
  • 基础组件:使用 Base 前缀,例如 BaseButton
  • 业务组件:使用业务名称,例如 UserCard
  • 页面组件:使用页面名称,例如 HomePage
3.2 文件命名
  • 页面文件:使用 kebab-case,例如 home-page.vue
  • 组件文件:使用 PascalCase,例如 UserCard.vue
  • 工具文件:使用 camelCase,例如 apiUtils.js
  • 样式文件:使用 kebab-case,例如 home-page.scss
3.3 变量和函数命名
  • 变量名:使用 camelCase,例如 userName
  • 函数名:使用 camelCase,例如 getUserInfo()
  • 常量名:使用 UPPER_CASE,例如 MAX_COUNT
  • 类名:使用 PascalCase,例如 UserService

4. 提交规范配置

使用 commitizen 和 husky 配置提交规范:

4.1 安装依赖
npm install --save-dev commitizen cz-conventional-changelog husky lint-staged
4.2 配置 package.json
{
  "scripts": {
    "commit": "git-cz",
    "lint": "eslint --ext .vue,.js,.jsx,.cjs,.mjs src/ --fix --ignore-path .gitignore"
  },
  "config": {
    "commitizen": {
      "path": "cz-conventional-changelog"
    }
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged",
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  },
  "lint-staged": {
    "*.{vue,js,jsx,cjs,mjs}": [
      "npm run lint",
      "git add"
    ]
  }
}

学习目标

通过本章节的学习,你应该能够:

  1. 了解开发规范的重要性
  2. 掌握代码规范的制定方法
  3. 学会命名规范的应用
  4. 理解目录结构规范的设计原则
  5. 掌握提交规范的执行方法
  6. 学会制定和执行团队开发规范

章节总结

本章节介绍了 uni-app 应用的开发规范,包括代码规范、命名规范、目录结构规范、注释规范和提交规范等。开发规范是团队开发中的重要组成部分,它可以帮助开发者保持代码风格一致,提高代码可读性和可维护性,减少团队协作中的摩擦。

在实际开发中,建议开发者根据项目需求和团队特点制定适合的开发规范,并使用工具(如 ESLint、Prettier、husky 等)强制执行规范。通过开发规范,开发者可以提高代码质量和开发效率,减少团队协作中的摩擦,确保项目的顺利进行。

« 上一篇 uni-app CI/CD 集成 下一篇 » uni-app 代码质量