c语言json路由选择源码,GitHub - fengcms/uniapp-pages-json-cli-build: 一个简单的 uniapp pages.json 动态路由生成命令行工具,基于 n...

动态生成 uniapp 配置文件 pages.json 的解决方案

最近接手了一个基于 uniapp 的开发项目,我个人对于它能够使用同一套代码就能够开发 h5\app\小程序 的强大功能表示非常钦佩。但是其配置文件 pages.json 也让我十分郁闷,原因无他,只因其是写死 JSON 文件,在管理的时候是十分不便的。

在搜索了一些资料,期望可以用 pages.js 文件来替代 pages.json 配置文件(JS的动态能力,可以很方便的拆分路由配置),但是没有找到很好的解决方案。倒是有一个,但是搞得过于繁琐,想想还是算球了。

于是,我自己用 Nodejs 手写了一个方案,虽然原始了一些,但是依赖十分轻,使用也比较便捷,个人感觉还是颇有用处的,所以特地撰文分享给大家。

构建文件构架

首先,我们在项目根目录中新建 router 文件夹,然后根据如下的格式构建文件结构。

router # 动态路由文件夹

├── build.js # 编译路由配置主文件

├── index.js # 主配置文件

└── modules # 动态路由模块文件

└── small.js # 拆分出来的模块路由文件

编写 build.js 文件

代码如下:

// 代码见源码,因修复BUG,总是同步到这里来不好。。。

build.js 文件为主文件,是用于编译 pages.json 的。如果你有 nodejs 编程基础的话,这是一个巨简单的问题。如果没有的话,就不用管了,直接复制走即可。

编写 index.js 文件

这个文件没啥说的,就是除了 pages.json 这个文件中的 pages 字段外的其他内容,导出即可。我这边示例文件如下:

module.exports = {

globalStyle: {

navigationBarTextStyle: 'white',

navigationBarTitleText: '司机配送',

navigationBarBackgroundColor: '#4a9ff8',

backgroundColor: '#4a9ff8'

},

tabBar: {

color: '#666',

selectedColor: '#4a9ff8',

backgroundColor: '#f7f7f7',

borderStyle: 'white',

list: [

{

pagePath: 'pages/index/index',

iconPath: 'static/images/icon-homeed.png',

selectedIconPath: 'static/images/icon-home.png',

text: '首页'

},

{

pagePath: 'pages/task/task',

iconPath: 'static/images/icon-tasked.png',

selectedIconPath: 'static/images/icon-task.png',

text: '任务'

},

{

pagePath: 'pages/my/my',

iconPath: 'static/images/icon-myed.png',

selectedIconPath: 'static/images/icon-my.png',

text: '我的'

}

]

}

}

这里面都是根据官方的配置去写即可了。因为这部分内容不多,因此没有必要拆分。区别就是,这里是JS,所以不用写双引号~呵呵。。。

编写 modules 下子路由文件

上代码:

module.exports = {

baseUrl: 'pages/small/',

children: [

{

path: 'register',

name: '注册'

}, {

path: 'login',

name: '登录'

}

]

}

导出一个对象,其中 baseUrl 是指你这些文件存放的位置目录。拆分出来的原因是不想在每个页面的路径里都要写这些重复的代码。

children 中就是该子路由涵盖的各个页面的路径以及标题了。

这里和 uniapp 默认的 pages.json 中的格式略有区别,我在 build.js 文件里面的 buildRouter() 函数就是做这个数据格式转化的。目的是为了让我们的子路由配置代码更加简洁。

这里需要注意的是,如果你需要使用到其他的配置项,就直接写就可以了。原来啥格式就是啥格式,比如这样:

module.exports = {

baseUrl: 'pages/small/',

children: [

{

path: 'register',

name: '注册',

'app-plus': {

titleNView: {

buttons: [

{

text: '消息',

fontSize: '16px'

}

]

}

}

}, {

path: 'login',

name: '登录'

}

]

}

上面的这个 'app-plus' 会自动插入进去的,官方文档要求怎么写,你在这边就怎么写就好了。一般这个用得比较少,所以这个我就不做额外的处理了。

子路由嵌套写法

虽然划分了各个子路由到不同的文件,但是,这些里面可能还是需要嵌套写法的。因此我更新了代码,增加了这种写法。

module.exports = {

baseUrl: 'pages/site/',

children: [

{

path: 'index',

name: '首页',

'app-plus': { titleNView: { buttons:[{ text:'消息', fontSize:'16px' }] } }

},

{ path: 'tobeAcceptedTask', name: '待接受任务', },

{

path: 'task',

// 嵌套写法演示

children: [

{ path: 'index', name: '任务' },

{

path: 'deliveryMerchant', name: '配送商户',

'app-plus': { titleNView: { buttons:[{ text:'地图模式', fontSize:'14px', width: '76px' }] } }

},

{

path: 'map', name: '地图模式',

'app-plus': { titleNView: false }

},

{ path: 'goodsList', name: '商品列表' },

{ path: 'receivables', name: '收款' },

]

},

]

}

使用

构建好这些代码之后,直接在命令行中运行 node router/build.js 就会在项目根目录中生成 pages.json 文件了。

这里需要说明的是,我这边项目是使用 hbuilder GUI界面生成的项目,所以根目录就是项目根目录。如果是使用的 CLI 工具生成的项目,上文中的根目录就变成了项目的 src 目录。

Copyright and License

Copyright by FungLeo(web@fengcms.com)

License: MIT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值