uniapp开发小程序配置文件解析

简介: 小程序配置文件主要有如下几个,这里按重要性分必须和非必须两部分。如下:必须:main.js、App.vue、pages.json、manifest.json、非必须:uni.scss、env、package.json、vue.config.js通过对HBuilderX开发小程序的配置文件,全部解析一遍,有益于立足全局的开发思维模式,提高对项目开发的把控力度。

前言


小程序配置文件主要有如下几个,这里按重要性分必须和非必须两部分。如下:

必须:

main.js、App.vue、pages.json、manifest.json、


非必须:

uni.scss、env、package.json、vue.config.js


通过对HBuilderX开发小程序的配置文件,全部解析一遍,有益于立足全局的开发思维模式,提高对项目开发的把控力度。


1、main.js 入口文件


是uni-app的入口文件,主要作用是初始化vue实例、使用需要的插件如vuex。

a、引入Vue库和App.vue,创建vue实例,并且挂载vue实例。

b、使用Vue.use引用插件,使用Vue.prototype添加全局变量。


// ============ 引入Vue库和App.vue ===============
import Vue from 'vue'
import App from './App'
App.mpType = 'app'
// ============ 全局变量添加 ===============
//  false :阻止 vue 在启动时生成生产的提示 
Vue.config.productionTip = false
import {
  report,
  sign_pv_report,
  sign_ev_report
} from '@/track/report.js'
Vue.prototype.$report = report
Vue.prototype.$pvSignReport = sign_pv_report
Vue.prototype.$evSignReport = sign_ev_report
// ============ 插件引用 ===============
// 添加uView
import uView from 'uview-ui'
Vue.use(uView);
// ============  创建vue实例 ===============
const app = new Vue({
    ...App
})
// ============ 使用Vue.use引用插件 ===============
// http拦截器,将此部分放在new Vue()和app.$mount()之间,才能App.vue中正常使用
import httpInterceptor from '@/api/http.interceptor.js';
Vue.use(httpInterceptor, app);
//挂载Vue实例
app.$mount() 


2、App.vue 页面入口文件


1、定义:是uni-app的主组件,所有页面都是在App.vue下进行切换的,是页面入口文件。但App.vue本身不是页面,这里不能编写视图元素。

2、作用:调用应用生命周期函数、配置全局样式、配置全局的存储globalData


2.1、应用生命周期

uni-app 支持 onLaunch、onShow、onHide 等应用生命周期函数。

注意事项:

1、应用生命周期仅可在App.vue中监听,在页面监听无效。

2、App.vue 不能写模板。


简单应用关注以下三个生命周期函数就够:


<script>
  export default {
  onLaunch: function() {
    console.log('App Launch,app启动')  
  },
  onShow: function() {
    console.log('App Show,app展现在前台') 
  },
  onHide: function() {
    console.log('App Hide,app不再展现在前台')  
  },
  }
</script>


其他生命周期函数:


<script>
  export default {
  onError: function(options) {
    console.log('onError:当uni-app报错时触发')
    console.log(options)
  },
  onUniNViewMessage: function(options) {
    console.log('onUniNViewMessage:对 nvue 页面发送的数据进行监听')
    console.log(options)
  },
  onUnhandledRejection: function(options) {
    console.log('onUnhandledRejection:对未处理的 Promise 拒绝事件监听函数(2.8.1+)')
    console.log(options)
  },
  onPageNotFound: function(options) {
    console.log('onPageNotFound:页面不存在监听函数')
    console.log(options)
  },
  onThemeChange: function(options) {
    console.log(':onThemeChange监听系统主题变化')
    console.log(options)
  },
  }
</script>


2.2、globalData

小程序有globalData,是一种简单的全局变量机制。

这套机制在uni-app里也可以使用,并且全端通用。


以下是 App.vue 中定义globalData的相关配置:


<script>
  export default {
  globalData: {  
        text: 'text'  
     },
  methods: {
  }
  }
</script>


注意点:

1、通常js中操作globalData的方式如下: getApp().globalData.text = ‘test’。

2、不要在定义 App() 的函数中,或调用 App 前调用 getApp() ,可以通过 this.$scope 获取对应的app实例。

3、通过 getApp() 获取实例之后,不要私自调用生命周期函数。

4、当在首页nvue中使用getApp()不一定可以获取真正的App对象。对此提供了 const app = getApp({allowDefault: true}) 用来获取原始的App对象,可以用来在首页对globalData等初始化。

5、如果需要把globalData的数据绑定到页面上,可在页面的onShow页面生命周期里进行变量重赋值(如:获取定位信息,监听网络状态)。


2.3、全局样式

在App.vue中,可以定义一些全局通用样式,例如需要加一个通用的背景色,首屏页面渲染的动画等都可以写在App.vue中。

注意:如果工程下同时有vue和nvue文件,此时需要把nvue不支持的css写在单独的条件编译里。如:


<style lang="scss">
  /* #ifndef APP-PLUS-NVUE */
   @import './common/uni.css';
   /* #endif*/
</style>


3、pages.json 全局配置


用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。

它类似微信小程序中app.json的页面管理部分。但注意的是:定位权限申请等原属于app.json的内容,在uni-app中是在manifest中配置实现。


这里取几个主要的配置进行说明:


3.1、pages 页面路由配置

这是唯一一个 必须配置的项。


uni-app 通过 pages 节点配置应用由哪些页面组成,pages 节点接收一个数组,数组每个项都是一个对象。


{
    "pages": [
        {
          "path": "pages/index/index",
          "style": {
            // 导航栏标题文字内容
            "navigationBarTitleText": "custom"
            }
        }, {
           "path": "pages/login/auth",
          "style": {
            "navigationBarTitleText": "custom"
            }
        }
    ]
}


注意:

1、pages节点的第一项为应用入口页(即首页)。

2、应用中新增/减少页面,都需要对 pages 数组进行修改。

3、文件名不需要写后缀,框架会自动寻找路径下的页面资源。


3.2、globalStyle 应用统一样式配置

设置默认页面的窗口表现


"globalStyle": {
  // 导航栏标题颜色及状态栏前景颜色,仅支持 black/white
  "navigationBarTextStyle": "black",
  // 导航栏背景颜色(同状态栏背景色)
  "navigationBarBackgroundColor": "#FFFFFF",
  // 下拉显示出来的窗口的背景色
  "backgroundColor": "#f5f5f5",
  // default/custom。custom即取消默认的原生导航栏
  "navigationStyle": "custom", 
  "mp-alipay": {
    // 导航栏透明设置。支持 always 一直透明 / auto 滑动自适应 / none 不透明
    "transparentTitle": "always",
    // 导航栏点击穿透
    "titlePenetrate": "YES"
  }
  },


3.3、easycom 组件快捷配置

传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。easycom将其精简为一步。 只要组件安装在项目的components目录下,并符合components/组件名称/组件名称.vue目录结构。就可以不用引用、注册,直接在页面中使用。


"easycom": { // 组件自动引入
  "autoscan": true, // 是否开启自动扫描,默认开启
  "custom": { // 以正则方式自定义组件匹配规则。
    "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue",
  }
  },


说明:


easycom方式引入的组件无需在页面内import,也不需要在components内声明,即可在任意页面使用。

easycom方式引入组件不是全局引入,而是局部引入。例如在H5端只有加载相应页面才会加载使用的组件。

在组件名完全一致的情况下,easycom引入的优先级低于手动引入(区分连字符形式与驼峰形式)。

考虑到编译速度,直接在pages.json内修改easycom不会触发重新编译,需要改动页面内容触发。

easycom只处理vue组件,不处理小程序专用组件(如微信的wxml格式组件)。不处理后缀为.nvue的组件。但vue组件也可以全端运行,包括小程序和app-nvue。可以参考uni ui,使用vue后缀,同时兼容nvue页面。

nvue页面里引用.vue后缀的组件,会按照nvue方式使用原生渲染,其中不支持的css会被忽略掉。这种情况同样支持easycom

3.4、tabBar 底部标签栏

参见:https://uniapp.dcloud.io/collocation/pages?id=tabbar

官方代码示例:


"tabBar": {
    "color": "#7A7E83",
    "selectedColor": "#3cc51f",
    "borderStyle": "black",
    "backgroundColor": "#ffffff",
    "list": [{
        "pagePath": "pages/component/index",
        "iconPath": "static/image/icon_component.png",
        "selectedIconPath": "static/image/icon_component_HL.png",
        "text": "组件"
    }, {
        "pagePath": "pages/API/index",
        "iconPath": "static/image/icon_API.png",
        "selectedIconPath": "static/image/icon_API_HL.png",
        "text": "接口"
    }]
}


注意:页面路径,必须在 pages 中先定义。


3.5、subPackages 分包加载配置

分包加载配置,此配置为小程序的分包加载机制。

具体内容查阅:【https://uniapp.dcloud.io/collocation/pages?id=subpackages】。


代码格式:


"subPackages": [{
  // 我的板块
  "root": "pages/mine",
  "pages": [{
    "path": "setting",
    "style": {
      "navigationStyle": "custom"
    }
    },
    {
    "path": "card",
    "style": {
      "navigationStyle": "custom"
    }
    }
  ]
  }],


3.6、preloadRule 分包预载配置

分包预载配置。

参见:https://uniapp.dcloud.io/collocation/pages?id=preloadrule


示例:


// 作用:提升后续分包页面时的启动速度
"preloadRule": {
        "pagesA/list/list": {//想要实现预加载的页面名称
            "network": "all",// 在指定网络下预下载,可选值为:all(不限网络)、wifi(仅wifi下预下载)
            "packages": ["__APP__"] //分包的 root 或 name __APP__ 表示主包。
        },
        "pagesB/detail/detail": {
            "network": "wifi",
            "packages": ["pagesA"]
        }
    }


3.7、condition 启动模式配置

启动模式配置,仅开发期间生效,用于模拟直达页面的场景,如:小程序转发后,用户点击所打开的页面。


参见:https://uniapp.dcloud.io/collocation/pages?id=condition

官方代码示例:


"condition": { //模式配置,仅开发期间生效
    "current": 0, //当前激活的模式(list 的索引项)
    "list": [{
            "name": "swiper", //模式名称
            "path": "pages/component/swiper/swiper", //启动页面,必选
            "query": "interval=4000&autoplay=false" //启动参数,在页面的onLoad函数里面得到。
        },
        {
            "name": "test",
            "path": "pages/component/switch/switch"
        }
    ]
}


这是一个很赞的调试配置。


4、manifest.json 应用配置


应用的配置文件,用于指定应用的名称、图标、权限等。HBuilderX 创建的工程此文件在根目录,CLI 创建的工程此文件在 src 目录。微信小程序配置具体查看mp-weixin。


微信小程序面版配置示例:

f844c0ed73cc49a88d80616541c027f6.png

源码视图(位置见上图),微信小程序配置示例:


{
  "name": "xxxxx-miniprogram", // 应用名称
  "appid": "__UNI__xxxxx", //uni-app的应用标识
  "description": "", // 应用描述
  "versionName": "1.0.0", // 版本名称,例如:1.0.0
  "versionCode": "1", // 版本号,例如:36
  "transformPx": false, // 是否转换项目的px,为true时将px转换为rpx,为false时,px为传统的实际像素
  /* 小程序特有相关 */
  "mp-weixin": {
  "appid": "wx_xxxxx_95809", // 微信小程序的AppID
  "setting": {
    // 微信小程序项目设置
    "urlCheck": true, // 是否检查安全域名和 TLS 版本
    "es6": true, // ES6 转 ES5
    "postcss": true, // 上传代码时样式是否自动补全
    "minified": true // 上传代码时是否自动压缩
  },
  "usingComponents": true, // 是否启用小程序组件配置
  "permission": {
    // 定位授权配置
    "scope.userLocation": {
    "desc": "你的位置信息将用于小程序位置接口的效果展示"
    }
  }
  },
  "quickapp": {},
  // 快应用特有相关
  "mp-alipay": {
  "usingComponents": true
  },
  "mp-baidu": {
  "usingComponents": true
  },
  "mp-toutiao": {
  "usingComponents": true
  },
  "vueVersion": "2", // Vue版本选择
  "uniStatistics": {
  // 是否开启 uni 统计,全局配置
  "enable": false
  }
}


5、uni.scss文件 全局样式控制


参见:https://uniapp.dcloud.io/collocation/uni-scss

为了方便整体控制应用的风格。比如按钮颜色、边框风格,uni.scss文件里预置了一批scss变量预置。

uni.scss是一个特殊文件,在代码中无需 import 这个文件即可在scss代码中使用这里的样式变量。uni-app的编译器在webpack配置中特殊处理了这个uni.scss,使得每个scss文件都被注入这个uni.scss,达到全局可用的效果。


注意:

1、如要使用这些常用变量,需要在 HBuilderX 里面安装 scss 插件;

2、使用时需要在 style 节点上加上【lang=“scss”】。


<style lang="scss">
</style>


3、pages.json不支持scss,原生导航栏和tabbar的动态修改只能使用js api


思考:

1、要不要添加小程序全局样式配置?

2、小程序全局样式配置的颗粒度要到什么程度?

3、能否做好、怎么做好与UI的沟通,提前处理UI整体样式的规范?

4、能否站在小程序整体的高度去思考,协调产品、UI尽量统一一些细微差异样式,使全局样式配置得到更多的应用?

待以上几个问题思考清楚了,那么就可以决定要怎么做了。如果连上面几个问题都不去考虑的,那么设计全局配置就没有什么意义了。


拓展:

DCloud社区问答:App.vue和 uni.scss都可以统一页面的样式,那么他们的区别是什么?

本质上分析:


uni.scss:仅用于添加统一样式的配置。

App.vue:样式添加只是其中的一项功能。最主要的是应用生命周期的监听和数据处理(options里面的数据和全局数据)。

App.vue实现需要另外注意的是:如果工程下同时有vue和nvue文件,全局样式的所有css会应用于所有文件,而nvue支持的css有限,编译器会在控制台报警,提示某些css无法在nvue中支持。此时需要把nvue不支持的css写在单独的条件编译里。

结论:统一样式最好还是放在 uni.scss 文件中。


6、配置环境变量


项目的不同创建方式,环境配置方式有所不同,参照如下:


1、HBuilderX创建的项目

参考文档:uni-app小程序开发:小程序开发规范与架构设计

目录2.2。

2、cli方式创建的项目

1、vue-config.js

在 vue.config.js 中可以修改 webpack 配置,包括环境变量,具体参考 vue-config.js。

2、package.json

在自定义条件编译平台时,可以在 package.json 文件的 env 节点下配置环境变量,具体参考 package.json

.env

3、CLI 创建的项目中可以在根目录中放置 .env 文件来指定环境变量,具体参考:环境变量。


7、package.json 自定义条件编译平台


1、在开发web时,有时需要一套代码编译发布到不同的站点,比如主站和微信h5站。(注意不是一套代码内部自适应不同浏览器,是真的分离部署了。

2、在开发小程序时,经常有扩展小程序平台,比如基于阿里小程序的钉钉小程序、淘宝小程序。


扩展新的平台后,有3点影响:


1、新增了对应平台的条件编译,可以为新平台编写专用代码。

2、运行时面向新平台编译运行。

3、发行时面向新平台编译发行。

注意:

1、只能扩展web和小程序平台,不能扩展app打包。

2、扩展小程序平台时只能基于指定的基准平台扩展子平台,不能扩展基准平台。


官方格式示例:


{
  "uni-app": { // 扩展配置
  "scripts": {
// "custom-platform": { //自定义编译平台配置,可通过cli方式调用
//  "title": "自定义扩展名称", // 在HBuilderX中会显示在 运行/发行 菜单中
//  "BROWSER": "", //运行到的目标浏览器,仅当UNI_PLATFORM为h5时有效,值:Chrome、Firefox、IE、Edge、Safari、HBuilderX
//  "env": { //编译环境变量
//    "UNI_PLATFORM": "", //基准平台,如:h5、mp-weixin、mp-alipay、mp-baidu、mp-toutiao、mp-qq
//    "MY_TEST": "" // ... 其他自定义环境变量
//  },
//  "define": { //自定义条件编译
//    "CUSTOM-CONST": true //自定义条件编译常量,建议为大写
//  }
// },
    "mp-dingtalk": {
    "title": "钉钉小程序",
    "env": {
      "UNI_PLATFORM": "mp-alipay"
    },
    "define": {
      "MP-DINGTALK": true
    }
    },
    "h5-weixin": {
    "title":"微信服务号",
    "BROWSER":"Chrome",  
    "env": {
      "UNI_PLATFORM": "h5"  
    },
    "define": {
      "H5-WEIXIN": true 
    }
    }
  }
  }
  }


对应新增条件编译:


// #ifdef MP
小程序平台通用代码(含钉钉)
// #endif
// #ifdef MP-ALIPAY
支付宝平台通用代码(含钉钉)
// #endif
// #ifdef MP-DINGTALK
钉钉平台特有代码
// #endif
// #ifdef H5
H5平台通用代码(含微信服务号)
// #endif
// #ifdef H5-WEIXIN
微信服务号特有代码
// #endif

Tips:

1、package.json文件中不允许出现注释,否则扩展配置无效。(目前亲测有效,应该是优化了)

2、vue-cli需更新到最新版,HBuilderX需升级到 2.1.6+ 版本。


结果展示:


de37dec679384c77ac77c46b86a68303.png

8、vue.config.js 编译自动加载

1、是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被自动加载。

2、一般用于配置 webpack 等编译选项,具体规范参考:vue.config.js

3、这里是用HBuilderX创建的项目,没有 webpack 编译选项,有兴趣的可以到官方文档了解。

4、尝试了下,目前简单处理的方法有:发布时删除console,感觉挺鸡肋的。真正的实用性能有待挖掘!!!


参考:

uni-app配置


相关文章
|
6天前
|
开发框架 监控 物联网
【Uniapp 专栏】探索 Uniapp 开发的更高级应用场景
【5月更文挑战第17天】Uniapp作为跨平台开发框架,在物联网、实时数据监控、企业级应用、地理定位和教育、电商领域展现出广泛应用潜力。通过蓝牙连接智能家居,实时展示数据变化,构建复杂业务流程,定位服务及互动学习平台,它提供了创新解决方案。随着技术发展,Uniapp将继续为开发者创造更多机遇和挑战,推动移动应用领域的前进。
【Uniapp 专栏】探索 Uniapp 开发的更高级应用场景
|
6天前
|
数据处理 开发者
【Uniapp 专栏】提升 Uniapp 开发效率的进阶方法
【5月更文挑战第17天】提升Uniapp开发效率的关键包括组件化、模板语法、数据处理和代码组织。通过封装组件如通用按钮,利用列表渲染生成多个元素,使用计算属性和方法处理复杂逻辑,以及采用预处理器如Sass编写样式。此外,良好的代码结构和使用开发者工具进行调试也是重要环节。掌握这些进阶技巧能帮助开发者更高效地构建高质量应用。
【Uniapp 专栏】提升 Uniapp 开发效率的进阶方法
|
2天前
|
人工智能 文字识别 自然语言处理
准确高效的TextIn文档解析:一项开发痛点的解决方案
企业在构建知识库问答系统时面临挑战,尤其是处理扫描文档和手写内容。传统OCR工具和开源方法在准确性和速度上不足。专业长文档解析成为关键,其中TextIn平台的文档解析服务脱颖而出。该服务能快速将PDF转为Markdown,提高处理速度和准确性,尤其适合处理复杂布局的长文档。通过实际测试,TextIn能有效增强LLM问答系统的性能,解决无法正确解析的问题。目前TextIn处于内测阶段,提供每周7000页的免费试用额度,开发者可通过其官网或“合研社”公众号了解更多信息和获取接口文档。
|
2天前
|
缓存 负载均衡 网络协议
使用Go语言开发高性能服务的深度解析
【5月更文挑战第21天】本文深入探讨了使用Go语言开发高性能服务的技巧,强调了Go的并发性能、内存管理和网络编程优势。关键点包括:1) 利用goroutine和channel进行并发处理,通过goroutine池优化资源;2) 注意内存管理,减少不必要的分配和释放,使用pprof分析;3) 使用非阻塞I/O和连接池提升网络性能,结合HTTP/2和负载均衡技术;4) 通过性能分析、代码优化、缓存和压缩等手段进一步提升服务性能。掌握这些技术能帮助开发者构建更高效稳定的服务。
|
5天前
|
监控 安全 NoSQL
采用java+springboot+vue.js+uniapp开发的一整套云MES系统源码 MES制造管理系统源码
MES系统是一套具备实时管理能力,建立一个全面的、集成的、稳定的制造物流质量控制体系;对生产线、工艺、人员、品质、效率等多方位的监控、分析、改进,满足精细化、透明化、自动化、实时化、数据化、一体化管理,实现企业柔性化制造管理。
30 3
|
6天前
|
JSON Android开发 数据格式
Android框架-Google官方Gson解析,android开发实验报告总结
Android框架-Google官方Gson解析,android开发实验报告总结
|
6天前
|
Android开发
Android高级开发面试题以及笞案整理,实战解析
Android高级开发面试题以及笞案整理,实战解析
|
6天前
|
缓存 数据处理 UED
【Uniapp 专栏】Uniapp 开发中的疑难问题解决与进阶策略
【5月更文挑战第17天】在 Uniapp 开发中,解决页面间数据传递、网络请求异常、屏幕适配及性能优化等问题至关重要。利用路由参数传递复杂数据,如`uni.navigateTo`和`JSON.stringify`;处理网络请求异常时,添加错误处理机制增强健壮性;使用响应式设计和缓存策略优化布局和性能。针对组件问题,需排查依赖和配置,而平台差异则需定制化处理。通过不断学习和实践,提升开发技能,确保项目成功实施。
【Uniapp 专栏】Uniapp 开发中的疑难问题解决与进阶策略
|
7天前
|
Android开发
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
【Uniapp 专栏】迈向 Uniapp 开发高手之路的进阶技巧
【5月更文挑战第16天】掌握Uniapp进阶技巧,包括深入理解组件化开发,如创建可复用的按钮组件;运用Vuex进行状态管理,便于全局状态操作;善用Flex布局实现灵活页面设计;合理使用请求库并设置拦截器处理错误和优化请求;同时关注性能优化,提升开发效率和应用质量。
【Uniapp 专栏】迈向 Uniapp 开发高手之路的进阶技巧

推荐镜像

更多