百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

一套微信小程序的开发模板

liuian 2025-01-20 14:46 50 浏览

ez-wxlite

ez-wxlite是一套小程序开发模板,旨在设计一套简洁、高效、可维护的开发框架。

本套模板总体上分为两部分:

  • client:小程序源码部分;
  • server:为本地服务,不是后端服务,主要作用是mock接口以及静态文件服务。

点击这里下载模板:https://github.com/wxlite-plus/ez-wxlite/releases

client

client部分是框架的核心,设计上分为:

  • req:网络请求;
  • router:路由;
  • config:配置信息;
  • utils:工具集,用于存放一些通用的公共方法。
  • wxs:工具集,wxml相关的一些公共变量及方法。

使用

框架核心代码都包含在client/framework文件夹内,在app.js中一次性引入:

// app.js
require('./framework/index.js').patch();

App({});

调用patch方法会直接完成App、Page、Component这三个全局方法的代理,并完成相应的注入,所以上面的App({})其实已经是被代理之后的App,在这一实例中我们可以获取到注入的options数据,通过this.$opts获取到:

App({
  onLaunch() {
    console.log(this.$opts);
  },
  onShow() {
    console.log(this.$opts);
  },
});

原小程序的App方法只能在onLaunch中获取到options,代理过后的App,通过将options挂载在实例上,我们可以在所有生命周期里访问到,方便使用,Page同理。

req

req是wx.request的高级封装,用于发起ajax请求以及文件上传。

wx.request是一个底层api,使用的不便之处在于:

  1. 返回结果比较底层,需要处理statusCode,而开发者往往更关注业务相关的data部分;
  2. 登录机制繁琐,设计上甚至有些反人类;
  3. 不具备良好的接口管理功能,可维护性差;

……

综上所述,wx.request需要一层高级的封装来简化操作,因此有了req,req代理了wx.request,并在这基础上做了一些设计工作,以提供良好的维护性:

  • promisify:支持promise,替代callback的方式;
  • 简化respone:简化返回的数据信息,只保留业务数据;
  • method替代url:使用js api的书写方式来替代直接书写url的方式;
  • 接口缓存:支持便捷的接口前端缓存;
  • 自动登录:登录态过期自动重新登录,过程对开发者透明。

详细内容请浏览:https://github.com/wxlite-plus/mp-req

router

页面的跳转存在哪些问题呢?

  1. 与接口的调用一样面临url的管理问题;
  2. 参数类型单一,只支持string。

当我们传递的参数argument不是string,而是number或者boolean时,也只能在下个页面得到一个argument.toString()值:

// pages/index/index.js
wx.navigateTo({
  url: '/pages/a/index?a=true',
});

// pages/a/index.js
Page({
  onLoad(options) {
    console.log(options.a); // => "true"
    console.log(typeof options.a); // => "string"
    console.log(options.a === true); // => false
  },
});

上面这种情况想必很多人都遇到过,而且感到很抓狂,本来就想传递一个boolean,结果不管传什么都会变成string。

我们的解决方案是:利用JSON.stringify+encodeURIComponent和decodeURIComponent+JSON.parse的方式让参数保真。

顺手也替换掉那不好记的navigate api,于是就出现了如下方式:

// pages/pageA/index.js
const { router } = require('../../framework/index.js');
Page({
  onReady() {
    router.push({
      name: 'home',
    });
  },
});


// pages/index/index.js
Page({
  onLoad() {
    console.log(this.$opts); // { id: '123', type: 1 }
  },
});

详细内容请浏览:https://github.com/wxlite-plus/mp-router

server

server为本地服务,不是后端服务,主要作用是:

  • mock服务:当后端接口未就绪时,使用自定义的数据模拟接口调用;
  • 静态文件服务:开发阶段使用本地静态资源替代线上的cdn资源;

运行

  1. 命令行进入server目录,执行npm包安装:npm install(或者使用yarn);
  2. 执行npm run dev。

done!

mock服务

mock的配置文件为server/mock/init.js,假设我需要一个获取我的用户信息的接口:

function init(server) {
  server.get('/user/myInfo', (req, res) => {
    res.json({
      code: 0,
      data: {
        id: '123456',
        name: 'Jack'
      },
      msg: 'succ',
    });
  });
}

接着我就可以通过访问http://localhost:8080/user/myInfo得到我预设的json。

静态文件服务

如果我们想要随意地切换静态资源服务环境,那么我们在使用静态资源的时候就不能hard code,那我们怎么做呢?我们使用wxs来配置静态资源的前缀。

client/wxs这一目录存放的是wxs文件,其中我们预定义了cdnPathTable.wxs,它的含义类似于client/config.apiUrlTable.js,我们定义了local、dev、release三个环境,然后在wxml文件中使用:

<!-- pages/index/index.wxml -->
<wxs src="../../wxs/index.wxs" modal="utils"></wxs>
<image src="{{utils.cdnPath}}/img/avt.jpg" />

这里的wxs和config其实没有什么区别,选择定义在wxs中是因为wxs在wxml中使用十分方便。

其他

为了使开发工作更简单高效,我们没有采用在小程序开发工具以外再搭建一层脚手架的做法,而是尽可能使用现有的工具和环境,借助于强大的vscode,我们还提供了:

  • eslint支持;
  • 借助typescript进行语法提示;

...

启用eslint功能只需要在根目录下运行npm install即可,typescript主要是实现小程序api的语法提示功能,当然这功能直接使用现有的vscode插件就可以实现,不过我目前没有找到比较好用的~考虑到微信的api文档更新比较频繁,插件的维护速度可能跟不上,所以简单地实现了一个本地化,在开发过程中可以手动补充,将自己常用的api定义好就足以提高效率了。

相关推荐

手机输入法怎么打繁体字(手机怎样输入繁体)

步骤如下:1.在手机设置页面找到输入法设置,如果能搜索,会帮助找到输入法设置页面。2.在系统的输入法设置页面,找到输入法自身的设置页面入口。3.在输入法自设难度设置页面,找到简繁切换的设置页面。4.勾...

photoshop 下载(photoshop下载需要花钱吗)

怎样下载photoshop的步骤方法如下面所示:1.首先第一步的步骤是在我们的电脑桌面上找到电脑管家并紧接着点击它(如果没有电脑管家需要提前安装)。2.然后一步的方法是点击屏幕右下方的工具箱。3.最后...

联想官方网站驱动下载官网(联想官方网站驱动下载官网安装)

拯救者官网下驱动的方法:打开联想服务官网(support.lenovo.com.cn),页面滚动下拉找到“帮助与支持”板块,点击“驱动和软件下载”。下载联想拯救者的驱动很简单。简单联想官网提供详细的驱...

win7一键重装(win7一键重装系统纯净版不需要激活哪个好)

1.制作一个u盘pe2.下载win7系统镜像到u盘里面3.u盘插入电脑4.启动电脑按F12或DE5.选择usb进入pe6.打开一键安装7.选择系统8.等待安装,都是自动安装无需手动9.安装系统完成后就...

硬盘低格工具软件(硬盘低格软件推荐)

万能低格工具llftool好万能低格工具llftool是一款强大易用的硬盘低级格式化软件,支持硬盘、移动硬盘、内存卡、u盘等等存储设备的低格功能,过程快速方便,性能安全稳定。另外,...

笔记本电脑过热保护自动关机
笔记本电脑过热保护自动关机

笔记本电脑发热可能是因为散热不行导致cpu过热自动关机保护,可以这样处理:1)清洁笔记本侧面和底部的散热孔,保证可以充分散热;2)外接风扇进行辅助散热,如问题依然存在,按照步骤3处理;3)拆卸后盖,清洁风扇叶片上的灰尘,同时,更换导热片下方...

2026-01-12 01:55 liuian

英特尔cpu查询(英特尔cpu查询保修)

英特尔官网序列号的查询,1可以通过BIOS设置或者CPU-Z等软件查询英特尔序列号。2英特尔序列号是由英特尔公司推出的一种唯一标识符,用于区分不同的处理器芯片。3除了查询英特尔序列号,CPU-Z...

电脑可以还原系统吗(电脑可以还原到出厂设置吗)

方法/步骤分步阅读1/11Windows7系统打开或者关闭系统还原点的方法Windows7系统关闭系统还原右键桌面计算机图标-属性;2/11在打开的系统窗口,我们点击左侧的高级系统设置;3/11在...

visio软件密钥(microsoft visio密钥)

在控制面板\所有控制面板项\程序和功能中找到,右键----更改

1920x1080和2k差别大么(4k为啥没1080p清晰)

区别:图像清晰度不同。2K的清晰度高于1920×1080。电视或显示屏领域上,1080P,一般对应1920*1080分辨率,2K则对应2560*1440分辨率。两者的主要区别在于像素点的多少,在尺寸相...

路由器恢复出厂设置会怎么样

现在的很多路由器都很智能化,我们在日常使用的时候,很多时候出现卡死或者忘记了路由器的登录密码等问题,这个时候我们就需要对路由器进行重置或者是恢复出厂设置,这样就可以用初始化的用户名和密码登录路由器了...

电脑密码忘了如何取消开机密码

1/5第一种方法:在开机时,按下F8进入带命令提示符的安全"模式输入"netuser+用户名+123456/add"可把自己的密码设置为"123456",这样进入控制面板就可以清除自己用户密码了。...

安卓手机exe文件怎么打开(安卓手机用什么打开exe文件)

在Android操作系统中,通常情况下是无法直接运行.exe文件的,因为Android手机和Windows操作系统在底层架构上存在较大差异。不过,有一些方法可以让Android手机...

声卡怎么安装在电脑主机上(声卡怎么插到电脑上)

安装电脑主机的声卡通常需要进行以下步骤:1.确认声卡的类型:首先,确定您要安装的声卡类型,是内置声卡还是外部插卡声卡。内置声卡通常已经集成在主板上,而外部插卡声卡需要插入主板的PCIe插槽或其他的扩...

hplaserjet1020驱动下载 win10

您好,感谢您选择惠普产品。首先确认打印机本身无报错请您点击开始--设置--打印机和传真(设备和打印机)--看到打印机图标把鼠标放在图标上确认状态文档是否为就绪文档0如果不是建议删除文档重启电脑,...