- 小程序logger
wxbm_logger.js [代码]/** *ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。 *WARN level表明会出现潜在错误的情形。 *INFO level指普通消息。 *DEBUG level指所有消息。 */ const machine = "real";//real 真机,simulator 模拟器 const loggerlevel = "INFO"; //日志打印级别 ERROR、WARN、INFO、DEBUG function getLogger(inamespace) { const level = loggerlevel.toUpperCase(); const namespace = inamespace == undefined || inamespace == null ? '' : inamespace; this.error = function() { if (level == "ERROR" || level == "DEBUG") { consoleTemplate("green", "red", "error", namespace,machine, arguments); } } this.warn = function() { if (level == "WARN" || level == "DEBUG") { consoleTemplate("green", "yellow", "warn", namespace, machine, arguments); } } this.info = function() { if (level == "INFO" || level == "DEBUG") { consoleTemplate("green", "#4a88ee", "info", namespace, machine, arguments); } } this.debug = function() { if (level == "DEBUG") { consoleTemplate("green", "grey", "debug", namespace, machine, arguments); } } } function consoleTemplate() { console.log( "[%c%s%c] Line%i %c%s%c %s:", "color:" + arguments[0], loggerformatTime(new Date()), "color:black", arguments[5].length, "color:" + arguments[1], arguments[2], "color:black", arguments[3] ); for (let li = 0; li < arguments[5].length; li++) { consolePrint((li + 1), arguments[5][li]); } if (arguments[4].toUpperCase() =="SIMULATOR"){ console.groupCollapsed("追踪函数的调用轨迹:"); console.trace(); console.groupEnd(); } } // 运算数为数字 typeof (x) = "number" // 字符串 typeof (x) = "string" // 布尔值 typeof (x) = "boolean" // 对象, 数组和null typeof (x) = "object" // 函数 typeof (x) = "function" function consolePrint(li, obj) { const type = typeof obj; switch (type) { case "number": console.log("L" + li + " --->%s", obj); break; case "string": console.log("L" + li + " --->%s", obj); break; case "boolean": console.log("L" + li + " --->%s", obj); break; case "object": if (Object.prototype.toString.call(obj) == '[object Array]') { console.log("L" + li + " --->[" + obj[0] + "]:%o", obj[1]); } else { console.log("L" + li + " --->%o", obj); } break; case "function": console.log("L" + li + " --->%s", "function"); break; case "undefined": console.log("L" + li + " --->%s", "undefined"); break; default: console.log("L" + li + " --->%s", "default"); } } const formatNumber = n => { n = n.toString() return n[1] ? n : '0' + n } //获取一个时间的年月日时分秒毫秒 const loggerformatTime = date => { const year = date.getFullYear() const month = date.getMonth() + 1 const day = date.getDate() const hour = date.getHours() const minute = date.getMinutes() const second = date.getSeconds() const millisecond = date.getMilliseconds() return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second, millisecond].map(formatNumber).join(':') } module.exports = { GetLogger: getLogger } [代码] 引入方式 [代码]import LOGGER from './wxbm_logger.js'; //注意引入层级路径 const logger = new LOGGER.GetLogger('utils/wxbm_http'); [代码] 使用方式 [代码] logger.error(/*thing*/); logger.warn(/*thing*/); logger.info(/*thing*/); logger.debug(/*thing*/); /*thing*/可以有的参数: 1,2,3,... ... 打印 line1 1 line2 2 line3 3 ... ... ["名称":"小白蛇"] 打印 line1 ["名称"]:"小白蛇" 以上补充:不局限于数字和字符串,object类型都行,最终都是console.log打印 [代码] [图片]
2019-08-20 - 小程序版本更新后,用户看到的还是旧版
直接上代码吧 在app.js的onLaunch里面写上这段代码 [代码] onLaunch: function() { if (wx.canIUse('getUpdateManager')) { const updateManager = wx.getUpdateManager() updateManager.onCheckForUpdate(function (res) { console.log('onCheckForUpdate====', res) // 请求完新版本信息的回调 if (res.hasUpdate) { console.log('res.hasUpdate====') updateManager.onUpdateReady(function () { wx.showModal({ title: '更新提示', content: '新版本已经准备好,是否重启应用?', success: function (res) { console.log('success====', res) // res: {errMsg: "showModal: ok", cancel: false, confirm: true} if (res.confirm) { // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 updateManager.applyUpdate() } } }) }) updateManager.onUpdateFailed(function () { // 新的版本下载失败 wx.showModal({ title: '已经有新版本了哟~', content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~' }) }) } }) } }, [代码] 大家可以看下文档里面说的小程序更新机制: 小程序冷启动时,如果发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动,即新版本的小程序需要等下一次冷启动才会应用上。 如果需要马上应用最新版本,可以使用 wx.getUpdateManager API 进行处理。
2019-08-25 - [有点炫]自定义navigate+分包+自定义tabbar
自定义navigate+分包+自定义tabbar,有需要的可以拿去用用,可能会存在一些问题,根据自己的业务改改吧 大家也可以多多交流 代码片段:在这里 {"version":"1.1.5","update":[{"title":"修复 [复制代码片段提示] 无法使用的问题","date":"2020-06-15 09:20","imgs":[]}]} 更新日志: 2019-11-25 自定义navigate 也可以调用wx.showNavigationBarLoading 和 wx.hideNavigationBarLoading 2019-11-25 页面滚动条显示在自定义navigate 和 自定义tabbar上面的问题(点击“体验custom Tabbar” [图片] [图片] 其他demo: 云开发之微信支付:代码片段
2020-06-15 - Fundebug微信小程序BUG监控服务支持Source Map
[图片] Source Map功能 微信小程序的Source Map功能目前只在 iOS 6.7.2 及以上版本支持。 微信小程序在打包时,会将所有 js 代码打包成一个文件,从而减少体积,加快访问速度。 然而,压缩代码的错误是很难Debug的,因为错误位置是这样的: 文件:app-service.js 行号:13782 列号:7974 这时,错误的位置信息(文件,行号和列号)失去了价值,因为开发者很难知道它所对应的源代码位置。 Fundebug的微信小程序BUG监控支持通过Source Map还原出错位置: 文件:utils/util.js 行号:573 列号:8 这样的话,开发者能够迅速定位出错的源代码。 在Fundebug控制台,只需要点击Source Map按钮,就可以切换压缩前后的堆栈: [图片] 如果希望使用Source Map功能,用户则需要: 从微信小程序管理后台下载Source Map文件 在Fundebug项目管理后台上传Source Map文件 下载Source Map文件 登陆微信公众平台 切换到左侧"开发"页面 点击链接"下载线上版本Source Map文件" 上传Source Map文件 将下载的Source Map文件解压缩,仅需上传解压缩的文件中的**__APP__/app-service.map.map**文件。 上传步骤 进入Fundebug『控制台』 选择『项目设置』 点击『Source Map』 选中需要上传的Source Map文件(支持上传多个Source Map文件) 点击『上传』 上传Source Map时可以配置应用版本: [图片] 下图为已经上传的不同版本的Source Map文件: [图片] 若希望区分不同版本微信小程序的Source Map文件,则需要在接入Fundebug插件时,配置对应的appversion属性,与上传Source Map时设置的版本保持一致: [代码]fundebug.init({ appVersion: "3.2.5" }); [代码] Fundebug微信小游戏BUG监控服务的Source Map功能也将尽快推出,敬请期待。 最后,感谢青团社的小伙伴的协助~ 参考 Fundebug文档: 微信小程序Source Map Source Map入门教程 关于Fundebug Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了20亿+错误事件,付费客户有阳光保险、核桃编程、荔枝FM、掌门1对1、微脉、青团社等众多品牌企业。欢迎大家免费试用! [图片] 版权声明 转载时请注明作者 Fundebug以及本文地址: https://blog.fundebug.com/2019/08/26/fundebug-wechat-miniprogram-support-sourcemap/
2019-08-26