前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >uni-app的pages.json动态生成的方法

uni-app的pages.json动态生成的方法

作者头像
薛定喵君
发布2021-09-14 14:49:24
3.3K0
发布2021-09-14 14:49:24
举报
文章被收录于专栏:薛定喵君薛定喵君

分享如何动态修改 uni-app 项目的 pages.json。

# 前言

最近遇到一个需求:项目中某些功能不在需求清单内,需要藏掉某些 h5 页面的入口不再对部分用户开放。

# pages.json 介绍

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

由于 pages.json 文件在项目中是写死的,所以就无法动态配置页面入口了 🐶。

# 解决方法

配置文件既然是写死的那怎么处理动态的页面配置需求呢?当然是有办法的,我们可以选择在打包前根据自己的需求动态修改这个配置文件成为我们需要的样子就可以了。

所以答案就是我们可以写(定制)一个 Node.js 脚本去读取这个全局配置文件进行修改加工之后再回写到 pages.json 即可。

# 实现步骤

# 需求介绍(适用场景)

这里的具体需求是某地区用户在打开页面之后隐藏底部的 tabbar ,因为隐藏掉 tab 之后页面上就只剩一个 tabbar 了,所以效果与不设置 tabbar 一致。

# 脚本思路

使用 fs 读取 pages.json ,得到一个 json 字符串,把字符串转换为 json 对象后对需要裁剪的部分进行相应处理,最后再写入 pages.json

在项目根目录新建一个 resetPages.js 文件用于存放脚本内容。

参考内容如下:

const fs = require('fs');
const path = './src/pages.json';
fs.readFile(path, function(err, data) {
  if (err) {
    return console.error(err);
  }
  var pages = data.toString(),
    tmpJSON = pages;
  tmpJSON = tmpJSON.replace('/* 应用 */', '');
  tmpJSON = tmpJSON.replace(/\/\//g, '');
  let newPageObject = JSON.parse(tmpJSON);
  // 清空底部 tabbar
  newPageObject.tabBar.list.length = 0;
  fs.writeFile(path, JSON.stringify(newPageObject), function(err) {
    if (err) {
      console.error(err);
    }
    console.log('----------全局配置修改成功-------------');
  });
});
# 使用方法

在根目录执行命令 node resetPages.js 即可。 打包项目时只需要 npm install && node resetPages.js && npm run build:h5 就行了。

因为每次部署时会先清空输出目录再拉取代码执行构建,所以中间执行一个额外命令修改全局配置的副作用就比较小,属于一种轻量级的方法。

# 总结

可以发现方法的核心就是把配置转为一个 js 对象来修改,改成我们需要的样子之后再转回去,因为配置文件里面可能存在一些转换不支持的代码,所以我们需要预先过滤掉可能会引起报错的字符。

本文所述方法只是提供一个思路,具体使用的时候可以结合自己的实际情况进行修改及扩展,比如我们可以把配置存放在数据库,脚本中通过接口拉取配置之后重新生成再进行打包等等。

# 参考资料

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-09-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 前言
    • # pages.json 介绍
    • # 解决方法
    • # 实现步骤
      • # 需求介绍(适用场景)
        • # 脚本思路
          • # 使用方法
          • # 总结
          • # 参考资料
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档