UNPKG

vite-uni-dev-tool

Version:

vite-uni-dev-tool, debug, uni-app, 一处编写,到处调试

525 lines (366 loc) 20.7 kB
# vite-uni-dev-tool 用于 vue3 + ts + hooks + uni-app 的开发调试插件 ## 安装 ```cmd # 使用 npm 安装 npm i vite-uni-dev-tool # 使用 pnpm 安装 pnpm i vite-uni-dev-tool # 使用 yarn 安装 yarn add vite-uni-dev-tool ``` ## 使用方法 ```ts import { defineConfig } from 'vite'; import uni from '@dcloudio/vite-plugin-uni'; import uniDevTool from 'vite-uni-dev-tool'; import pages from './src/pages.json'; import * as path from 'path'; // https://vitejs.dev/config/ export default defineConfig({ optimizeDeps: { // 预构建排除 vite-uni-dev-tool 模块,防止 eventBus 冲突 exclude: ['vite-uni-dev-tool'], }, plugins: [ // 一定要在 uni() 之前调用 否则微信小程序将无法正常编译组件 uniDevTool({ pages, }), uni(), ], server: { host: true, port: 10088, }, resolve: { alias: { '@': path.resolve(__dirname, 'src'), }, }, }); ``` ### **_如果修改uniDevTool 配置项编译到微信,Android 需要先删除 dist 目录_** - 这个很重要,防止出现各种异常问题 - 这个很重要,防止出现各种异常问题 - 这个很重要,防止出现各种异常问题 ### uniDevTool 配置项 | 参数 | 说明 | 类型 | 默认值 | | ---------------------------- | ------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------ | | pages | 配置pages.json | object | {} | | enableCaptureScreen | 是否监听 截屏时间,默认关闭,开启需要前往插件市场安装 `uni-usercapturescreen` 插件 | boolean | false | | enableInterceptPromiseReject | 是否拦截Promise.reject 最好不要拦截 默认禁用 | boolean | false | | consoleMaxSize | 最大的console条数 | number | 1000 | | networkMaxSize | 最大的网络请求条数 | number | 1000 | | uploadMaxSize | 最大的上传文件条数 | number | 1000 | | wsDataMaxSize | 最大的套接字消息条数 | number | 1000 | | screenMaxSize | 最大的屏幕记录条数 | number | 1000 | | elEventListMaxSize | 最大的元素事件记录条数 | number | 1000 | | uniEventListMaxSize | 最大的uni事件记录条数 | number | 1000 | | scanCodeListMaxSize | 最大扫描码记录条数 | number | 1000 | | cacheMaxSize | 最大占用缓存空间 bytes | number | 8\*1024\*1024\*10 | | initShowDevTool | 初始化时是否显示调试按钮,默认显示 | boolean | true | | zIndex | 调试按钮的zIndex,998 | number | 998 | | useDevSource | 该属性处于实验当中,谨慎使用,读取开发环境 source file,source map,默认 禁用 | boolean | false | | sourceFileServers | 该属性处于实验当中,谨慎使用,开发环境 source file 服务器地址,默认 [] ,配合 useDevSource 使用 | string[] | [] | | importConsole | 是否导入 console 默认不导入, 只会捕获error 和 warn | boolean | false | | importEventBus | 是否导入 eventBus 默认导入,不导入将会无法触发捕获事件 | boolean | true | | captureList | 需要捕获的事件列表 | \['tap','touchstart','touchend','touchemove'\] | \[\] | | vueVersion | vue版本 该属性处于实验当中,3 支持 vue3 + ts + setup + hooks ,2 支持 vue3,vue2 非ts 非setup 情况 | number | 3 | | excludeImportConsole | 排除导入 console 的目录 或 文件 | string[] | \['uni_modules', 'node_modules', 'src/App.vue'\] | | excludeImportDevTool | 排除导入 DevTool 的目录 或 文件 | string[] | \['uni_modules', 'node_modules'\] | | includeCaptureElDataSet | 需要捕获的 data-xxx, 优先级高于 `excludeCaptureElDataSet` , 默认空 捕获全部 | string[] | \[\] | | excludeCaptureElDataSet | 排除捕获的 data-xxx, 优先级低于 `includeCaptureElDataSet` | string[] | \[\] | | injectDevTool | 是否注入调试工具, 默认注入 | boolean | true | | uploadAbnormalUV | 上传异常信息到远程服务器 | UploadAbnormalUV | undefined | ### 为什么不用 subPackages? - 从当前页跳转到subPackages页面时,会触发 uni-app 页面生命周期,有时是不希望如此的,比如在开发过程中,希望可以直接在当前页面进行调试。 ### 如何将 console 日志输出到控制台 - 0.0.5版本之后为了在生产环境中移除插件,开发环境中插件将会自动导入 `console`,无需手动导入 - 0.0.5版本之后不推荐使用 `uni.__dev__console` , 在未来版本中可能会进行移除 - 0.0.35 版本开始,已经移除 `uni.__dev__console` ```ts // 方法 1 import { console } from 'vite-uni-dev-tool/dist/core'; console.log('hello vite-uni-dev-tool'); // 方法 2 uni.__dev__console.log('hello vite-uni-dev-tool'); ``` ### 0.0.12 版本在插件中增加了 `importConsole` 属性,默认不导入,只捕获 `error`, `warn`, 用户手动调用的 `console` 将不再进行捕获,如需捕获传入 `true`即可 ```ts uniDevTool({ pages, importConsole: true }), ``` ### 0.0.38 版本加入`injectDevTool` 属性,根据不同的环境中注入调试工具 ```ts import { defineConfig } from 'vite'; import uni from '@dcloudio/vite-plugin-uni'; import uniDevTool from 'vite-uni-dev-tool'; import pages from './src/pages.json'; import * as path from 'path'; // https://vitejs.dev/config/ export default defineConfig(({ mode }) => { console.log('mode: ', mode); return { optimizeDeps: { // 预构建排除 vite-uni-dev-tool 模块 exclude: ['vite-uni-dev-tool'], }, plugins: [ uniDevTool({ pages, useDevSource: true, importConsole: true, // 根据环境判断是否注入调试工具 injectDevTool: mode === 'development', }), uni() as any, ], server: { host: true, port: 10088, }, resolve: { alias: { '@': path.resolve(__dirname, 'src'), }, }, }; }); ``` ### vite 预加载导致的 `eventBus` 事件冲突 , 预加载排除 `vite-uni-dev-tool` 即可 ```ts optimizeDeps: { // 预构建排除 vite-uni-dev-tool 模块,防止 eventBus 冲突 exclude: ['vite-uni-dev-tool'], } ``` ### 注意事项 ### 兼容性说明 | vue2 | vue3 | | ---- | ---- | | N | Y | | h5 | 安卓 | 微信小程序 | 支付宝小程序 | 抖音小程序 | 其他 | | --- | ---- | ---------- | ------------ | ---------- | ------ | | Y | Y | Y | Y | Y | 未测试 | ### 安全性声明 插件不收集任何信息,只供开发人员调试使用 - 插件中使用到了 `fs`,用于栈信息获取源代码文件 - 插件使用了 `uni.request` ,用于栈信息获取源代码文件 ### 预览 ![all.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/all.png) - 调试按钮 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/button.jpg) - 支持 console 日志 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/console.jpg) - 支持 network 查看 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/network1.jpg) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/network2.jpg) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/network3.jpg) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/network4.jpg) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/network5.jpg) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/network6.jpg) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/network7.jpg) - 支持 upload 查看 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/upload1.jpg) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/upload2.jpg) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/upload3.jpg) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/upload4.jpg) - 支持 websocket 查看 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/websocket1.jpg) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/websocket2.jpg) - 支持 connection 网络状态查看 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/connection.jpg) - 支持 route 查看,跳转 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/route.jpg) - 支持 el event 查看 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/el_event.jpg) - 支持 uni event 查看 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/ui_event.jpg) - 支持 capture screen 查看 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/capture_screen.jpg) - 支持 scan code 查看 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/scan_code.jpg) - 支持 storage 查看,编辑 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/storage.jpg) - 支持 vuex 查看,编辑 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/vuex.jpg) - 支持 pinia 查看,编辑 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/pinia.jpg) - 支持查看 window 信息 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/window.jpg) - 支持查看 device 信息 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/device.jpg) - 支持查看 system 信息 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/system.jpg) - setting 页,支持重启,导出日志(h5,app) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/setting1.jpg) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/setting2.jpg) - 其他页 ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/json_detail.jpg) ![image.png](https://gitee.com/cloud_l/vite-uni-dev-tool/raw/master/packages/docs/public/source_code.jpg) ## 更新日志 ### 0.0.41 - 微信小程序重新启动 - 优化`console`中的`link`展示和跳转 - 支持 `ScanCode` 查看 ### 0.0.40 - 修复事件列表最大尺寸配置错误 - 增加异常上报功能 - 优化 initDevTool 插入位置 - 兼容抖音小程序 ### 0.0.39 - `uniDevTool` 插件新增 `injectDevTool` 属性,默认为 `true`,可根据外界 mode 判断是否注入 `DevTool` - 调试文档预览图篇 ### 0.0.38 - 增加网络请求发起者: user-> 用户 , dev_tool -> 调试工具 - 替换部分 `ref` -> `shallowRef` 提升一点点 - 修复 `NetworkDetail` 滚动 - 修复 `Tabs` 滚动 - TODO: 微信模拟器中 `navigateHeight` 已经被计算到 `windowHeight` 中 ,导致高度计算异常,暂时没法处理, 真机模式暂无该问题 - 模拟器中最好不要将调试按钮拖动到屏幕 `2/3` 处, 防止高度计算导致的调试按钮不可见 - 解决 android `Uncaught TypeError: Cannot read property 'children' of null at uni-app-view.umd.js:7` - 解决 android `Uncaught TypeError: Cannot read property '$' of undefined at uni-app-view.umd.js:7` - 兼容 `android` 请求异常栈行 - 修复初始化过早调试弹窗事件没有注册完成 - 兼容不同平台 `style` 传递造成的差异 - 兼容 `mp-alipay` - 强制 `connectSocket` 生成 `socketTask` - 优化 `socket message` 展示 ### 0.0.37 - 去除页面外层样式 `height: 100vh; overflow: auto;` - 当内容高度大于 `100vh` 时,未滚动到顶部 可触发 `onPullDownRefresh` - 暂无阻止滚动事件穿透方法 - 增加事件的捕获和排除 - 解决控制台报错 `TypeError: Cannot read properties of null (reading 'scrollHeight')` ### 0.0.36 - 优化 `console` 展示,不在列表中展示 `object` , `array` - 增加了部分事件捕获: `tap`, `touchstart`, `touchend`,`touchmove` - 添加了新的配置项 `importEventBus` 和 `captureList` ### 0.0.35 - 修复开发,生产环境造成 `core`条件编译异常 - 修复阻止滚动穿透带来的部分tab无法滚动 - `scroll-view` 出现滚动时,可以阻止触发 `onPullDownRefresh`,`onReachBottom`,仅部分tab可以触发 - 修复调试按钮拖拽 - 固定按钮样式 - 移除 `uni.__dev__console` - 优化插件初始化逻辑 - 切换路由时关闭调试器 - 增加路由进入时间,离开时间,最近停留时长,总停留时长,进入次数 - 优化底部 tab 高度计算 - 优化RunJS执行逻辑 - 调整 console 部分样式 - 加入截屏监听配置项 - 如果需要监听截屏事件,请前往插件市场安装 `uni-usercapturescreen` 进行 uts 编译 - 如果编译失败 `uni-usercapturescreen` 不存在,将 `index.js|ts` 重命名成 `index.uts` - h5 不支持截屏监听 - 兼容 `android` `AutoSize`获取高度异常报错 - 增加 `setting` 反馈链接地址 ### 0.0.34 - 兼容 navigate 和 tab 高度造成的异常 - 阻止滚动穿透 - h5 采用事件进行阻止 + 页面样式(自动注入) - WEIXIN, APP-PLUS 对页面样式进行调整 `height: 100vh; overflow: auto;`, 无法阻止页面级别的 `onPullDownRefresh`,`onReachBottom` ### 0.0.33 - 兼容 android 事件冲突 ### 0.0.32 - 兼容 android 事件冲突 ### 0.0.31 - 优化创建逻辑 ### 0.0.30 - 兼容 app JsonPretty 警告 - 输出创建信息 ### 0.0.29 - 优化创建逻辑 ### 0.0.28 - 兼容 app JsonPretty 警告 ### 0.0.27 - 兼容h5 内容高度 ### 0.0.26 - 兼容h5 systemInfo ### 0.0.25 - 部分样式调整 - 兼容h5 systemInfo ### 0.0.24 - 修复缺失的key - 优化版本信息 - 优化插件初始化逻辑 - 解决部分控制台 warn ### 0.0.23 - 兼容微信小程序 拦截store - 优化部分展示 ### 0.0.22 - 增加网络请求拦截规则 - 优化插件初始化逻辑 ### 0.0.21 - 增加 source code 部分语法高亮 - 补充 network detail 字段 ### 0.0.20 - 修复 storage 调用异常 ### 0.0.19 - 修复 VirtualListPro 向上滚动 ### 0.0.18 - Network Send 兼容微信小程序 - Network Send 去除部分传参格式 - 部分样式兼容 暗夜模式 ### 0.0.17 - v3增加网络请求排序 - v3增加网络请求调用栈 - v3优化源码查看 ### 0.0.16 - 修复 console 主题颜色 ### 0.0.15 - 兼容部分 vue2 场景 ### 0.0.14 - 兼容 script 非 setup ### 0.0.13 - 将部分ts内容转换为js - 更换打包方式 - 开始兼容 vue2 ### 0.0.12 - 修复 network url显示长度 - 修复部分样式 - 修复列表高度异常 - 修复销毁之后操作 - 刷新之后隐藏调试弹窗 - 列表返回到顶部 - 增加层级属性,默认层级1000 - 构建导致的 eventBus 冲突 ### 0.0.11 - 新增 console run 简易提示 - 新增 appInfo - 新增 captureScreen(h5端不支持) - 新增滑动切换 - 修复 console 滚动到指定位置 - 修复调用栈起始行 - 修复 json pretty 折叠icon ### 0.0.10 - 修复 console 过滤异常 ### 0.0.9 - 修复 template 多节点造成的 createIntersectionObserver 异常 ### 0.0.8 - 修复多 template 注入调试工具异常 - 修复 json pretty 逗号位置 - 修复 json pretty symbol 类型转换异常 - json pretty 自动判断虚拟列表 - 虚拟列表抽离到独立文件 ### 0.0.7 - 监听uni.$on - 监听uni.%once - 监听uni.$emit - 监听uni.$of ### 0.0.6 - 修复 app 查看 source 重启 ### 0.0.5 - 修复 路由支持跳转 subPackages - 增加栈位置查看(实验中功能) ### 0.0.4 - 修复初始启用状态 ### 0.0.3 - 文档调整 ### 0.0.2 - 文档调整 ### 0.0.1 - 初始版本发布