uni-app全局文件

一、pages.json 页面路由

  • pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生 tabbar 等。
  • 导航栏高度为 44px (不含状态栏),tabBar 高度为 50px (不含安全区)。
  • 它类似微信小程序中app.json的页面管理部分。注意定位权限申请等原属于app.json的内容,在 uni-app 中是在 manifest 中配置。

1.1 配置项列表

属性 类型 必填 描述 平台兼容
globalStyle Object 设置默认页面的窗口表现
pages Object Array 设置页面路径及窗口表现
easycom Object 组件自动引入规则 2.5.5+
tabBar Object 设置底部 tab 的表现
condition Object 启动模式配置
subPackages Object Array 分包加载配置 H5 不支持
preloadRule Object 分包预下载规则 微信小程序、QQ 小程序、抖音小程序、支付宝小程序、京东小程序
leftWindow Object 大屏左侧窗口 H5
topWindow Object 大屏顶部窗口 H5
rightWindow Object 大屏右侧窗口 H5
uniIdRouter Object 自动跳转相关配置,新增于 HBuilderX 3.5.0
entryPagePath String 默认启动首页,新增于 HBuilderX 3.7.0 微信小程序、支付宝小程序、抖音小程序、鸿蒙元服务

1.2 pages.json 是干什么的

pages.json = uni-app 的"路由 + 全局界面配置中心"

1.3 pages.json 最核心的 3 大块

json 复制代码
{
  "pages": [],
  "tabBar": {},
  "globalStyle": {}
}

1.4 pages(页面注册,最重要)

1️⃣ 页面必须在这里注册,才能访问

json 复制代码
{
  "pages": [
    {
      "path": "pages/login/login",
      "style": {
        "navigationBarTitleText": "登录"
      }
    }
  ]
}
  • 核心规则
    • path 必须和文件路径一致
    • 第一个 page 是首页
    • 不注册 → navigateTo 直接失败

2️⃣ 常用 page style 配置(你会经常改)

json 复制代码
"style": {
  "navigationBarTitleText": "登录",
  "navigationBarBackgroundColor": "#ffffff",
  "navigationBarTextStyle": "black",
  "enablePullDownRefresh": false
}
字段 作用
navigationBarTitleText 标题
navigationBarBackgroundColor 顶部背景
navigationBarTextStyle white / black
enablePullDownRefresh 下拉刷新

1.5 tabBar

1️⃣ 一旦进 tabBar,就 跳转规则完全变

json 复制代码
"tabBar": {
  "color": "#999",
  "selectedColor": "#007AFF",
  "list": [
    {
      "pagePath": "pages/home/index",
      "text": "首页"
    },
    {
      "pagePath": "pages/login/login",
      "text": "我的"
    }
  ]
}
  • tabBar 的三条铁律
    • tabBar 页面不能用 navigateTo
    • tabBar 页面 不会被销毁
    • tabBar 页面 不能带参数

1.6 globalStyle(全局样式)

1️⃣ 所有页面默认样式

json 复制代码
"globalStyle": {
  "navigationBarTextStyle": "black",
  "navigationBarTitleText": "uni-app",
  "navigationBarBackgroundColor": "#ffffff",
  "backgroundColor": "#f8f8f8"
}

页面 style 会覆盖 globalStyle

1.7 subPackages(分包,项目稍大必用)

json 复制代码
"subPackages": [
  {
    "root": "pages-sub",
    "pages": [
      {
        "path": "detail/detail",
        "style": {
          "navigationBarTitleText": "详情"
        }
      }
    ]
  }
]
  • 主包:登录、首页

  • 分包:详情、列表、配置

  • 首屏体积 = 主包大小

1.8 preloadRule(预加载,性能优化)

json 复制代码
"preloadRule": {
  "pages/home/index": {
    "network": "all",
    "packages": ["pages-sub"]
  }
}

1.9 小总结

1️⃣ 页面不在 pages.json → 跳不过去

2️⃣ 第一个 page 是首页

3️⃣ tabBar 页面用 switchTab

4️⃣ tabBar 页面不能传参

5️⃣ 页面 style > globalStyle

6️⃣ 页面不会用 Vue 的 mounted

7️⃣ 分包能救首屏性能

8️⃣ pages.json = 路由注册表

二、manifest.json 应用配置

manifest.json 是干什么的

  • manifest.json 文件是应用的配置文件,用于指定应用的名称、图标、权限等。HBuilderX 创建的工程此文件在根目录,CLI 创建的工程此文件在 src 目录。
  • manifest.json = 应用"壳层配置" + "平台差异配置"
  • 它 不管页面、不管路由,只管:

    • 应用长什么样

    • 运行在什么平台

    • 权限 / 启动方式 / 编译行为

三、App.vue/App.uvue

App.vue / App.uvue 是什么?

在 uni-app 项目中,这两个文件都是应用的 入口 / 全局配置文件。它们不是真正的页面,而是整个应用最顶层的全局组件。所有页面都是在 这个顶层下 进行切换的。

区别:

  • 如果是常规 uni-app 项目通常是 App.vue(使用 Vue 框架)。
  • 如果是 uni-app x 项目,则是 App.uvue(工作机制类似,只是格式上略有不同)。

为什么不能在 App.vue 写视图模板?

不能写 <template> 标签也就是不能写页面 UI 内容

因为这个文件不是一个真正的"页面组件"。它是 应用的全局入口,不能像普通页面那样写界面标签。

App.vue / App.uvue 能做什么?

1、监听应用生命周期

在这里你可以监听应用整个生命周期的逻辑,比如:

  • onLaunch:应用启动时触发
  • onShow:应用从后台返回前台时触发
  • onHide:应用进入后台时触发
js 复制代码
<script>
	// 只能在App.vue里监听应用的生命周期
	export default {
		onLaunch: function(options) {
			console.log('App Launch')
			console.log('应用启动路径:', options.path)
		},
		onShow: function(options) {
			console.log('App Show')
			console.log('应用启动路径:', options.path)
		},
		onHide: function() {
			console.log('App Hide')
		}
	}
</script>

这些生命周期只能在 App.vue 里监听,其他页面监听无效。

2、定义全局数据 globalData

可以在这里定义一些全局变量,全应用任何地方都能访问。

比如你在 App.vue 中写:

js 复制代码
export default {
  globalData: {
    userInfo: null
  }
}

然后在页面访问:

java 复制代码
const app = getApp()
console.log(app.globalData.userInfo)

这相当于应用级别的简单全局状态。如果是大型复杂状态管理,建议使用 Vuex 或 Pinia 来管理。

3、写 全局样式

在 App.vue/uvue 的 <style> 中定义的 CSS 会被整个项目所有页面共享。

比如设定一个全局背景颜色:

html 复制代码
<style>
body {
  background-color: #fff;
}
</style>

注意:如果你的项目同时有 .vue 和 .nvue 文件,某些 CSS 在 nvue 里可能不支持,这时需要做条件编译。

App.vue / App.uvue 什么时候运行?

  • 一打开应用,它的生命周期函数会自动运行

  • 每次应用从后台回来也会触发 onShow

  • 不同平台(H5、App、各种小程序)都适用这些生命周期逻辑(不过有些钩子部分平台可能不支持)

注意事项

  • App.vue/uvue 不是页面 ,不能写 <template>
  • 只能用于 全局逻辑、生命周期、样式、全局变量
  • 页面之间跳转由 uni.navigateTo, uni.switchTab 等 API 控制
  • 想做全局状态的话,用 Vue 的 状态管理(Vuex/Pinia)比 globalData 更可靠
功能 写在 App.vue/uvue 写在页面
应用启动逻辑
全局样式 部分可
页面 UI
页面组件逻辑

四、main.js/main.uts

main.js / main.uts 是干嘛的?

它负责:创建应用实例,把 App.vue / App.uvue 挂载起来,然后启动整个应用。

👉 如果 App.vue 是"灵魂"

👉 那 main.js 就是"点火开关"

没有 main.js,App.vue 根本跑不起来。

为什么需要 main.js?

你写了 App.vue,但浏览器 / App / 小程序 并不知道:

❓ "我该从哪个文件开始执行?"

main.js 就是明确告诉框架:

  • 用哪个框架(Vue)
  • 用哪个根组件(App.vue)
  • 怎么初始化应用
  • 什么时候挂载到页面

main.js(传统 uni-app,Vue)结构详解

最最常见的 main.js

js 复制代码
import App from './App.vue'

import { createSSRApp } from 'vue'

export function createApp() {
  const app = createSSRApp(App)
  return {
    app
  }
}
  • import App from './App.vue'
    • 把 全局根组件 App.vue 引进来
    • 相当于:"等会我要用这个 App.vue 当整个应用的最外层"
  • import { createSSRApp } from 'vue'
    • 从 Vue 框架里,拿到一个「创建应用实例」的方法
    • 为什么不是 createApp?因为 uni-app 需要 多端 + SSR 兼容,官方统一用 createSSRApp。
  • export function createApp() { ... }
    • 这是 uni-app 约定的入口函数
    • 框架启动时,会自动调用这个函数
    • 你不用手动调用,uni-app 帮你调
  • const app = createSSRApp(App)
    • 用 App.vue 创建一个 Vue 应用实例
    • 等价于 Vue 项目里的:createApp(App)
  • return { app }
    • 把这个应用实例交给 uni-app 框架
    • 后续由 uni-app 负责挂载、渲染、生命周期管理

整体执行流程

text 复制代码
main.js
  ↓
createSSRApp(App.vue)
  ↓
App.vue 执行 onLaunch
  ↓
pages.json 决定首页
  ↓
页面 onLoad / onShow

main.js 能干什么?

注册全局组件

js 复制代码
app.component('MyButton', MyButton)

这样你在任何页面都能直接用<MyButton />

挂载全局属性(常用)

js 复制代码
app.config.globalProperties.$api = api

页面中就可以:

js 复制代码
this.$api.login()

main.js 和 App.vue 的分工

  • main.js 负责"搭框架"
  • App.vue 负责"定规则"
文件 职责
main.js 创建应用、注册插件、全局能力
App.vue onLaunch / onShow / 全局样式
页面 UI + 业务逻辑
相关推荐
芋头莎莎8 小时前
基于MQTT通讯UNIapp程序解析JSON数据
前端·uni-app·json
霸王蟹8 小时前
Uni-app 跨端开发框架Unibest快速体验
前端·笔记·微信·uni-app·unibest
木子啊10 小时前
Uni-app条件编译:跨端开发终极指南
uni-app·条件编译
老毛肚10 小时前
uniapp-ruoyi-spring部署宝塔
java·spring·uni-app
Mr Xu_11 小时前
UniApp 实战:深度解析 App 端自动检测与静默更新(含强制更新)
javascript·vue.js·uni-app
说给风听.12 小时前
基于 Vue3 的 UniApp 实战手册:多端开发与技能变现之路
uni-app
外派叙利亚12 小时前
uniapp canvas 自定义仪表盘 可滑动 可点击 中间区域支持自定义
前端·javascript·uni-app·html
不爱学习小趴菜12 小时前
uniapp微信小程序无法屏蔽右上角胶囊按钮(...)问题解决方案
微信小程序·小程序·uni-app
WeiAreYoung12 小时前
uni-app Xcode制作iOS谷歌广告Google Mobile Ads SDK插件
ios·uni-app
2501_9160088912 小时前
iOS 开发助手工具,设备信息查看、运行日志、文件管理等方面
android·ios·小程序·https·uni-app·iphone·webview