pages.config
pages.config.ts 用来写 pages.json 里与具体页面无关的配置,例如 globalStyle、tabBar、easycom 和手写的 subPackages。
创建配置文件
// pages.config.ts
import { defineUniPages } from '@uni-helper/vite-plugin-uni-pages'
export default defineUniPages({
globalStyle: {
navigationBarTextStyle: 'black',
navigationBarTitleText: 'uni-helper',
},
})defineUniPages 只提供类型提示,返回值就是传入的对象。
默认查找 pages.config,支持以下扩展名:
pages.config.ts
pages.config.mts
pages.config.cts
pages.config.js
pages.config.cjs
pages.config.mjs
pages.config.json配置文件可以导入本地模块,开发期间修改这些依赖会重新生成 pages.json,详见配置依赖热更新。
可用字段
配置对象和 pages.json 的结构一一对应:
export default defineUniPages({
pages: [], // 手写页面条目
globalStyle: {},
tabBar: {},
subPackages: [],
easycom: {},
condition: {},
preloadRule: {},
})其中 pages 和 subPackages 会和扫描结果合并,其他字段原样写进 pages.json。完整的 pages.json 类型由 @uni-helper/uni-pages-types 提供。
覆盖页面配置
pages.config.ts 中的 pages 条目优先级最高:
export default defineUniPages({
pages: [
{
path: 'pages/index/index',
style: {
navigationBarTitleText: '配置里的标题',
},
},
],
})同一个页面同时被扫描到和手工写入时,两条会合并。配置里写出的属性覆盖 definePage,没写的属性继续使用扫描结果。
只写配置、不存在的页面也会保留。mergePages: false 时,插件完全不扫描页面文件,pages 和 subPackages 都以配置为准。
子包页面路径
配置里 subPackages[].pages[].path 按 pages.json 的惯例相对 root 书写:
export default defineUniPages({
subPackages: [
{
root: 'pkg',
pages: [
{ path: 'detail' }, // 实际路由是 pkg/detail
],
},
],
})同一个页面被扫描到时,两条会按路径合并,手工条目的 style 等属性覆盖扫描结果。
tabBar
配置里的 tabBar.list 可以和页面里的 definePage({ tabBar }) 混用:
- 两边都有同一个
pagePath时,以配置里的条目为准 - 只在
definePage里声明的条目会补到列表里 tabBar的其他属性由配置决定
多个平台同时往一个 pages.json 写入时,list 的顺序和顶层属性会按平台分别保存,详见多平台与条件编译。
自定义配置来源
configSource 决定从哪里加载配置,默认 'pages.config':
UniPages({
configSource: {
files: 'config/pages',
},
})也可以传数组,按顺序加载第一个有效配置:
UniPages({
configSource: [
{ files: 'pages.config' },
{ files: 'vite.config', rewrite: config => config?.UniPages },
],
})需要自己读取或转换入口时,可以提供 parser 和 transform。加载顺序、依赖跟踪和限制见配置依赖热更新。
按平台写配置
配置文件在构建期的 Node 进程里执行,可以直接读环境变量:
const platform = process.env.UNI_PLATFORM
export default defineUniPages({
globalStyle: {
navigationBarTitleText: platform === 'h5' ? 'H5' : '小程序',
},
})不要依赖配置对象上的 // #ifdef 注释。条件编译由 uni-app 处理 pages.json 时执行,写在 TypeScript 配置里不会生效。需要按平台区分页面配置时,优先使用 definePage 的条件 DSL。