【Uniapp】代码规范八:配置规范

588 阅读9分钟

1. 项目配置文件管理

UniApp项目中有多个配置文件,每个文件承担不同的职责,合理管理这些配置文件是非常关键的。主要的配置文件包括manifest.jsonpages.jsonuni.scssnetwork等。

manifest.json配置

  • 应用信息:包括应用名称、AppID、版本号、应用描述等基本信息。确保填写准确,避免上线后出现问题。
  • 权限配置:针对不同平台(如iOS、Android、H5),为应用配置所需的权限。例如,网络请求权限、定位权限等。
  • SDK配置:通过manifest.json可以为项目引入各类第三方SDK(如推送服务、支付服务、登录授权等)。在确保安全性和必要性的前提下,合理配置SDK。
  • 平台配置:根据目标平台配置不同的特性和权限,如小程序平台的分包加载、H5的favicon等。

pages.json页面配置

  • 页面路由管理:配置项目的页面路径,定义页面的URL和组件之间的导航。

    通过pages.json来管理页面路由,规定项目中的每个页面路径。

    {
      "pages": [
        {
          "path": "pages/index/index",
          "style": {
            "navigationBarTitleText": "首页"
          }
        }
      ]
    }
    
  • 分包优化:当项目页面较多时,建议使用分包配置,将不同功能模块划分为多个包进行异步加载,减少主包体积,提升首屏加载速度。

    {
      "subPackages": [
        {
          "root": "pages/module/",
          "pages": [
            {
              "path": "list",
              "style": {
                "navigationBarTitleText": "模块列表"
              }
            }
          ]
        }
      ]
    }
    

uni.scss全局样式配置

  • 全局变量管理:使用uni.scss可以全局定义项目的颜色、字体、间距等样式变量,统一管理样式,避免多处重复定义。

    $primary-color: #007AFF;
    $font-size: 16px;
    
  • 跨平台样式兼容:通过uni.scss中的平台选择器为不同平台提供样式兼容性配置。使用平台特定的样式来适应不同平台的UI需求。

    // #ifdef APP-PLUS
    .app-button {
      background-color: $primary-color;
    }
    // #endif
    

网络请求配置

  • API Base URL配置:在项目中,使用统一的配置文件来管理API的Base URL,确保在不同的环境(开发、测试、生产)中能快速切换API地址。

    const config = {
      devBaseUrl: 'http://localhost:8080/api/',
      prodBaseUrl: 'https://api.example.com/'
    };
    ​
    export default config;
    
  • 统一的请求拦截器配置:在网络请求库中(如uni.request),可以设置统一的请求拦截器,处理Token的统一添加,错误码的统一处理等,保证请求流程的一致性。

    uni.addInterceptor('request', {
      invoke(args) {
        // 在请求之前添加Token
        args.header = {
          ...args.header,
          'Authorization': `Bearer ${uni.getStorageSync('token')}`
        };
      },
      fail(err) {
        // 统一错误处理
        console.error(err);
      }
    });
    

环境变量管理

  • 多环境配置:使用不同的配置文件来管理开发、测试、生产等多环境的API地址、日志输出级别等配置。通过环境变量进行切换。

    • 创建不同环境的配置文件,例如config.dev.jsconfig.prod.js
    • 使用Node.js的process.env.NODE_ENV来切换不同的配置。
    const config = {
      baseUrl: process.env.NODE_ENV === 'production' ? 'https://api.prod.com' : 'http://localhost:8080'
    };
    ​
    export default config;
    

微信小程序分包配置

  • 小程序分包加载:针对微信小程序项目,可以使用分包加载技术将不同的功能模块独立成子包,减少主包体积,优化性能。

    {
      "pages": [
        "pages/index/index"
      ],
      "subPackages": [
        {
          "root": "pages/subpackage/",
          "pages": [
            "detail/detail"
          ]
        }
      ]
    }
    

2. 代码构建和打包配置

UniApp支持多平台的编译和打包,良好的打包配置有助于提高项目构建效率,减少冗余文件和资源。

HBuilderX构建配置

  • 自动编译配置:通过设置HBuilderX的自动编译选项,在保存代码时自动触发编译,减少手动操作步骤,提高开发效率。

    {
      "id": "autoCompile",
      "checked": true
    }
    
  • 清理冗余资源:在编译过程中,清理不需要的资源文件,减少最终包的体积,提升项目的加载和运行效率。

Webpack配置

  • Webpack配置优化:针对H5平台,调整Webpack配置文件,进行代码分割(Code Splitting)和Tree Shaking,减少打包文件体积。

    module.exports = {
      optimization: {
        splitChunks: {
          chunks: 'all'
        }
      }
    };
    
  • CDN资源引入:在H5项目中,使用CDN引入常用的第三方库(如Vue、Element UI等),减少打包的文件体积,加快首次加载速度。

小程序打包优化

  • 小程序插件分包:通过插件分包机制,将功能插件与主包隔离,减少主包大小,优化加载性能。

    {
      "plugins": {
        "plugin-name": {
          "version": "1.0.0",
          "provider": "wx1234567890"
        }
      }
    }
    
  • 压缩和混淆:开启代码压缩和混淆,减少代码体积,同时提高安全性,防止代码被轻易逆向工程。

    {
      "setting": {
        "es6": true,
        "minified": true
      }
    }
    

3. 环境配置管理

环境变量管理

  • 不同环境API配置:在项目中创建多个环境配置文件(如dev.env.jsprod.env.js等),通过环境变量实现不同环境的API和其他配置的切换。

    const apiBaseUrl = process.env.NODE_ENV === 'production' ? 'https://api.prod.com' : 'http://localhost:3000';
    
  • 开发环境和生产环境分离:开发过程中需要频繁使用开发环境配置,而上线时需要使用生产环境配置。可以通过process.env.NODE_ENV进行区分。


4. 插件和扩展库配置

插件引入管理

  • 按需引入插件:避免全局引入不必要的第三方库,尽量按需引入,以减少代码冗余和打包体积。

    import debounce from 'lodash/debounce';
    
  • 插件配置管理:统一管理项目中使用的第三方插件及其版本,避免多个版本共存或不兼容的问题。将常用插件和扩展库放入package.json中管理,并尽量保持其版本的一致性。

插件更新管理

  • 定期更新插件:在开发过程中,保持项目依赖的插件版本更新,使用最新的特性和修复Bug,但需要注意版本更新可能带来的兼容性问题,避免盲目升级。

5. 持续集成与部署配置

持续集成(CI)

  • CI配置:在项目中配置持续集成工具(如GitLab CI、Jenkins等),实现自动化测试、打包和部署,确保每次提交的代码都能通过自动化验证,减少人为错误。

    stages:
      - build
      - deploy
    
    build_job:
      stage: build
      script:
        - npm install
        - npm run build
    

自动化部署

  • 自动化部署配置:通过自动化部署工具(如Docker、Kubernetes、Jenkins等),在每次代码提交后自动将应用部署到服务器,减少人工操作,提高效率。可配置脚本来自动化打包和发布,确保一致性和减少出错。

    示例:使用Jenkins进行自动化部署:

    1. 配置Jenkins pipeline,定义构建、打包、测试、部署的过程。
    2. 在代码仓库中添加.jenkinsfile配置文件,实现不同环境的自动化部署。
    pipeline {
        agent any
        stages {
            stage('Build') {
                steps {
                    sh 'npm install'
                    sh 'npm run build'
                }
            }
            stage('Deploy') {
                steps {
                    sh './deploy.sh'
                }
            }
        }
    }
    

Docker配置

  • Docker环境配置:为项目创建Docker配置文件(如Dockerfile),将应用封装到Docker容器中,确保在不同环境下的运行一致性。

    Dockerfile示例:

    Dockerfile复制代码# 使用Node.js官方镜像
    FROM node:14-alpine
    ​
    # 创建工作目录
    WORKDIR /app
    ​
    # 复制package.json文件并安装依赖
    COPY package*.json ./
    RUN npm install
    ​
    # 复制项目文件
    COPY . .
    ​
    # 编译项目
    RUN npm run build
    ​
    # 开启应用服务
    CMD ["npm", "start"]
    ​
    # 容器端口
    EXPOSE 3000
    
  • Docker Compose配置:如果项目中有多个服务,可以使用docker-compose.yml文件来管理多个容器,简化服务的启动和管理。

    docker-compose.yml示例:

    version: '3'
    services:
      app:
        build: .
        ports:
          - "3000:3000"
      database:
        image: mysql:5.7
        environment:
          MYSQL_ROOT_PASSWORD: example
        ports:
          - "3306:3306"
    

6. 日志和监控配置

日志管理

  • 日志级别配置:为不同环境设置不同的日志输出级别。在开发环境中可以输出详细的debug日志,而在生产环境中只输出error级别的日志,避免影响性能。

    示例:使用console.log()console.error()等日志级别分类输出信息。

    if (process.env.NODE_ENV === 'production') {
      console.error('Error log');
    } else {
      console.debug('Debug log');
    }
    
  • 日志收集和监控:通过引入日志收集工具(如ELK、Sentry等),在后台集中存储和分析应用日志,实时监控应用运行状态。

性能监控配置

  • 前端性能监控:通过配置性能监控插件(如LighthousePerformance API等),监控页面的加载时间、交互响应时间等性能指标,帮助分析和优化性能瓶颈。

    window.addEventListener('load', (event) => {
      const performanceData = window.performance.timing;
      console.log('Page load time: ', performanceData.loadEventEnd - performanceData.navigationStart);
    });
    
  • 服务器监控:使用服务器性能监控工具(如Prometheus、Grafana等)配置监控系统,对CPU、内存、磁盘等硬件指标进行监控,保证服务器健康运行。


7. 跨平台兼容性配置

平台差异化处理

  • 不同平台的差异配置:在pages.jsonmanifest.json中,根据不同平台设置平台特定的功能和权限。可以使用#ifdef指令来分别处理不同平台的代码逻辑和样式。

    H5平台与小程序平台的样式差异处理:

    // #ifdef H5
    .button {
      background-color: blue;
    }
    // #endif// #ifdef MP-WEIXIN
    .button {
      background-color: green;
    }
    // #endif
    

组件兼容性配置

  • 不同平台组件的兼容性处理:部分原生组件在不同平台的表现不一致,如音视频播放、地图等组件。在开发过程中应对这些组件进行适配配置,确保兼容性。
  • 小程序平台组件的配置:在开发微信小程序时,尽量使用微信小程序提供的原生组件进行开发,避免过多使用自定义组件,以提高兼容性和性能。

8. 安全配置

权限管理

  • 权限配置:在项目开发中,针对不同的操作设置必要的权限验证,如访问用户信息、读取地理位置等。通过manifest.json配置文件声明所需的权限,并确保仅在需要时请求权限,避免滥用权限。

数据安全

  • 数据加密:对于敏感数据(如用户信息、Token等),在传输过程中使用HTTPS协议进行加密,保证数据的安全性。
  • 敏感信息存储:避免在客户端存储明文的敏感信息,如密码、Token等。对于Token,建议使用本地加密存储或通过服务器刷新机制管理。

防止XSS和CSRF攻击

  • 防范XSS攻击:在处理用户输入时,确保对输入内容进行过滤和转义,避免在页面上直接渲染未过滤的用户输入。

    防范XSS示例:

    const userInput = '<script>alert("XSS")</script>';
    const safeInput = userInput.replace(/</g, "&lt;").replace(/>/g, "&gt;");
    
  • 防范CSRF攻击:通过设置跨站请求伪造(CSRF)保护机制,在用户提交表单或请求数据时,确保请求携带唯一的CSRF令牌,以验证请求的合法性。

配置规范的详细内容贯穿了UniApp项目的多个方面,包括项目文件管理、代码打包优化、环境变量管理、自动化部署、日志监控、安全配置等。通过遵循这些配置规范,可以有效地提升项目的开发效率、维护性和运行性能,同时确保应用在不同平台上的稳定性与兼容性。