HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

uni.createInnerAudioContext() 音频播放器卡死或者播放不准

uni-app-x

有需要联系 我能解决

有需要联系 我能解决

后端开发,如何做接口测试

后端

因为做后端开发,不可能等uniapp前端开发完成,才进行接口测试的,而是在后端自己开发的时候,应该就需要自己做单元测试的。

而现代的接口,后端又不太好自己调用浏览器去测试。因为需要设置请求的header和body参数,这些后端都很难自己去测试的。

假如后端自己去通过Junit等单元测试类去做测试,也不是不行,但是测试效率非常慢,比如在java中,运行一个Junit,需要等待spring boot启动起来,测试效率实在是喜人。而且需要编写代码去实现,非常麻烦。

因为,这里我推荐使用专业的接口测试工具去完成,这里可以使用yunedit-post去做测试:

yuneidt-post做接口测试大概功能如下:

一、接口测试功能:
可以设置接口的url参数、header参数和body体内容,请求后端的接口,然后展示接口的返回结果。

二、接口单元测试功能:
可以编写简单的函数来接收接口返回结果,判断接口返回的数据是否及格。在第一个功能中,需要可以通过肉眼观看接口返回结果来判断接口返回的数据是否正确。但是假如返回的数据比较多比较复杂的时候,肉眼是很难判断接口返回的数据是否符合预期的,这时候就可以使用单元测试功能。
如下图,yunedit-post提供了非常简便的界面,新建单元测试后,函数头是预定义好的,用户只需要去实现函数体即可,也就是只需要关心return的结果即可,return为true则测试通过,为false则测试不通过。

三、后置处理功能-保存接口返回结果功能

可以使用后置处理功能,将接口返回结果保存到yunedit-post的全局变量或组变量当中,因为调用其他接口的时候,可能需要使用这些变量作为接口的输入值。

四、后置处理功能-使用sql清理测试数据功能:

可以定义后置处理的sql脚本,做数据清理工作,数据清理可以使用接口的返回值,也可以使用yunedit-post的变量值。如下图:

五、使用yunedit-post变量作为接口输入参数
上面说到了,接口的返回值可以通过后置处理功能,保存到变量当中,然后在下一个接口中,可以使用这个变量。
一个比较经典的场景是登录接口返回了token,然后使用后置处理功能保存到yunedt-post的全局变量当中,然后调用其他接口的时候,直接引用这个全局变量,如下图所示:

六、自动化测试功能:
一个复杂的功能,往往需要调用数十个接口,假如每次都手工去一一调用,会十分麻烦,因为,可以通过自动化测试,通过界面或自定义脚本去定义接口的执行顺序,如下图:

七、接口分享功能
可以使用一键分享功能,直接分享在yunedut-post已经一定的接口,生成可浏览的文档,如下两图:

然后生成在线文档:

继续阅读 »

因为做后端开发,不可能等uniapp前端开发完成,才进行接口测试的,而是在后端自己开发的时候,应该就需要自己做单元测试的。

而现代的接口,后端又不太好自己调用浏览器去测试。因为需要设置请求的header和body参数,这些后端都很难自己去测试的。

假如后端自己去通过Junit等单元测试类去做测试,也不是不行,但是测试效率非常慢,比如在java中,运行一个Junit,需要等待spring boot启动起来,测试效率实在是喜人。而且需要编写代码去实现,非常麻烦。

因为,这里我推荐使用专业的接口测试工具去完成,这里可以使用yunedit-post去做测试:

yuneidt-post做接口测试大概功能如下:

一、接口测试功能:
可以设置接口的url参数、header参数和body体内容,请求后端的接口,然后展示接口的返回结果。

二、接口单元测试功能:
可以编写简单的函数来接收接口返回结果,判断接口返回的数据是否及格。在第一个功能中,需要可以通过肉眼观看接口返回结果来判断接口返回的数据是否正确。但是假如返回的数据比较多比较复杂的时候,肉眼是很难判断接口返回的数据是否符合预期的,这时候就可以使用单元测试功能。
如下图,yunedit-post提供了非常简便的界面,新建单元测试后,函数头是预定义好的,用户只需要去实现函数体即可,也就是只需要关心return的结果即可,return为true则测试通过,为false则测试不通过。

三、后置处理功能-保存接口返回结果功能

可以使用后置处理功能,将接口返回结果保存到yunedit-post的全局变量或组变量当中,因为调用其他接口的时候,可能需要使用这些变量作为接口的输入值。

四、后置处理功能-使用sql清理测试数据功能:

可以定义后置处理的sql脚本,做数据清理工作,数据清理可以使用接口的返回值,也可以使用yunedit-post的变量值。如下图:

五、使用yunedit-post变量作为接口输入参数
上面说到了,接口的返回值可以通过后置处理功能,保存到变量当中,然后在下一个接口中,可以使用这个变量。
一个比较经典的场景是登录接口返回了token,然后使用后置处理功能保存到yunedt-post的全局变量当中,然后调用其他接口的时候,直接引用这个全局变量,如下图所示:

六、自动化测试功能:
一个复杂的功能,往往需要调用数十个接口,假如每次都手工去一一调用,会十分麻烦,因为,可以通过自动化测试,通过界面或自定义脚本去定义接口的执行顺序,如下图:

七、接口分享功能
可以使用一键分享功能,直接分享在yunedut-post已经一定的接口,生成可浏览的文档,如下两图:

然后生成在线文档:

收起阅读 »

uniapp 多环境配置打包,比较优雅的解决方案

uniapp 多环境配置打包,比较优雅的解决方案

读取.env.[development|test|staging|production]配置文件进行打包,最终效果如下图可以看到多个环境,
并且我们可以自定义更多的环境配置

前言

由于uniapp的hbuilder开发工具,只提供了development和production的环境编译方式,一般来说,只能做到development和production两个环境的区分。在实际开发中,我们如果有多个环境开发需求和打包需求,尤其是配置多个环境的接口请求地址等配置。
针对这种情况,我在网上找了很多相关的资料,基本都是命令行的方案,使用uniapp的scripts方案也有,但是是把配置信息写到scripts上的,这解决方案也不够优雅,如果有多个配置就显得很拥肿了。

下面,我们一步一步来配置实现如何根据编译环境读取对应的.env文件加载到项目中。(下面只讲vite配置的方式,webpack的配置方式有空再补充)

配置实现

  1. 项目根目录,自行新增对应的配置文件

  1. 在package.json文件添加uni-app的scripts,需要配置几个环境就添加几个,关于这个配置的意思,可以去查看其他相关的文档,这里不展开讲述。

配置好后,点击运行和发行就能看到对应的环境选择项了

此时只是有对应的环境选择项,接下来的思路就是,判断对应的script执行环境,来加载不同的.env配置文件,读取到项目中

  1. 修改vite.config.js文件,重点看注释
import { loadEnv } from 'vite';  
import uni from '@dcloudio/vite-plugin-uni';  
// import viteCompression from 'vite-plugin-compression';  
// https://vitejs.dev/config/  
export default (command, mode) => {//uniapp中,这个mode,不用命令行的添加--mode编译的话,是undefined的  
    let env = undefined;  
    if(!mode){//这里是为了确保mode有值,假如开发人员直接在开发工具选择编译到浏览器,也能兼容到  
        if(process.env.NODE_ENV=='production'){  
            mode = 'production'  
        }else{  
            mode = 'development'  
        }  
    }  
    switch (process.env.UNI_SCRIPT){//这个就是第三步配置的uni-app的script,一一对应判断  
        case 'dev-h5':  
            mode = 'development';  
            break;  
        case 'test-h5':   
            mode = 'test'  
            break;  
        case 'stage-h5':  
            mode = 'staging'  
            break;  
        case 'prod-h5':  
            mode = 'production'  
            break;  
    }  
    env = loadEnv(mode, __dirname,"APP")  
    console.log(`编译${mode}环境`)  
    console.log(env);//此时已经把env配置读取到了,并且这是个json格式,  
    return {//别试图在这里定义mode,试过了,在uniapp中不起作用,目前方案只想到了用define来做  
        envPrefix:'APP_',  
        plugins: [  
            uni()  
        ],  
        server: {  
            host: true,  
            // open: true,  
            port: env.APP_PORT,  
            hmr: {  
                overlay: true,  
            },  
        },  
        define:{//根据vite的官方文档,可以把define定义的变量名,在项目编译时,识别项目文件中的这个变量名直接替换成env配置,我们把这个变量放到config.js文件中,对env配置进行集中管理  
            __VITE_ENV__:JSON.stringify(env)  
        }  
    };  
};
  1. 接下来在项目中由一个config.js文件来集中管理env相关的配置,再暴露出来给其他业务模块调用。

至此,uniapp的多环境配置已经完成!!!
如果需要命令行配置打包,可以参考其他的博客,直接配置命令行就可以,命令行写--mode参数即可。

继续阅读 »

uniapp 多环境配置打包,比较优雅的解决方案

读取.env.[development|test|staging|production]配置文件进行打包,最终效果如下图可以看到多个环境,
并且我们可以自定义更多的环境配置

前言

由于uniapp的hbuilder开发工具,只提供了development和production的环境编译方式,一般来说,只能做到development和production两个环境的区分。在实际开发中,我们如果有多个环境开发需求和打包需求,尤其是配置多个环境的接口请求地址等配置。
针对这种情况,我在网上找了很多相关的资料,基本都是命令行的方案,使用uniapp的scripts方案也有,但是是把配置信息写到scripts上的,这解决方案也不够优雅,如果有多个配置就显得很拥肿了。

下面,我们一步一步来配置实现如何根据编译环境读取对应的.env文件加载到项目中。(下面只讲vite配置的方式,webpack的配置方式有空再补充)

配置实现

  1. 项目根目录,自行新增对应的配置文件

  1. 在package.json文件添加uni-app的scripts,需要配置几个环境就添加几个,关于这个配置的意思,可以去查看其他相关的文档,这里不展开讲述。

配置好后,点击运行和发行就能看到对应的环境选择项了

此时只是有对应的环境选择项,接下来的思路就是,判断对应的script执行环境,来加载不同的.env配置文件,读取到项目中

  1. 修改vite.config.js文件,重点看注释
import { loadEnv } from 'vite';  
import uni from '@dcloudio/vite-plugin-uni';  
// import viteCompression from 'vite-plugin-compression';  
// https://vitejs.dev/config/  
export default (command, mode) => {//uniapp中,这个mode,不用命令行的添加--mode编译的话,是undefined的  
    let env = undefined;  
    if(!mode){//这里是为了确保mode有值,假如开发人员直接在开发工具选择编译到浏览器,也能兼容到  
        if(process.env.NODE_ENV=='production'){  
            mode = 'production'  
        }else{  
            mode = 'development'  
        }  
    }  
    switch (process.env.UNI_SCRIPT){//这个就是第三步配置的uni-app的script,一一对应判断  
        case 'dev-h5':  
            mode = 'development';  
            break;  
        case 'test-h5':   
            mode = 'test'  
            break;  
        case 'stage-h5':  
            mode = 'staging'  
            break;  
        case 'prod-h5':  
            mode = 'production'  
            break;  
    }  
    env = loadEnv(mode, __dirname,"APP")  
    console.log(`编译${mode}环境`)  
    console.log(env);//此时已经把env配置读取到了,并且这是个json格式,  
    return {//别试图在这里定义mode,试过了,在uniapp中不起作用,目前方案只想到了用define来做  
        envPrefix:'APP_',  
        plugins: [  
            uni()  
        ],  
        server: {  
            host: true,  
            // open: true,  
            port: env.APP_PORT,  
            hmr: {  
                overlay: true,  
            },  
        },  
        define:{//根据vite的官方文档,可以把define定义的变量名,在项目编译时,识别项目文件中的这个变量名直接替换成env配置,我们把这个变量放到config.js文件中,对env配置进行集中管理  
            __VITE_ENV__:JSON.stringify(env)  
        }  
    };  
};
  1. 接下来在项目中由一个config.js文件来集中管理env相关的配置,再暴露出来给其他业务模块调用。

至此,uniapp的多环境配置已经完成!!!
如果需要命令行配置打包,可以参考其他的博客,直接配置命令行就可以,命令行写--mode参数即可。

收起阅读 »

vue3仿deepseek/chatgpt流式ai聊天会话

vite vue3

基于vue3+deepseek实战纯撸一款仿DeepSeek/ChatGPT流式聊天AI对话聊天。
集成Vue3 对接 DeepSeek Web API 流式打字输出对话大模型。支持代码高亮、本地缓存,支持移动端+PC端完美显示。

img

img

img

img

img

特性

  • 流式响应:逐字显示 AI 回复,提供更好的用户体验
    优雅的 UI 设计:
    • 气泡式对话界面
    • 打字机效果
    • 平滑的动画过渡
    • 响应式布局

img

img

img

想要了解更多的技术实现细节可以去参考下面这篇分享文章。
Vue3-DeepSeek流式AI聊天|vite6+vant4+deepseek智能ai对话助手

继续阅读 »

基于vue3+deepseek实战纯撸一款仿DeepSeek/ChatGPT流式聊天AI对话聊天。
集成Vue3 对接 DeepSeek Web API 流式打字输出对话大模型。支持代码高亮、本地缓存,支持移动端+PC端完美显示。

img

img

img

img

img

特性

  • 流式响应:逐字显示 AI 回复,提供更好的用户体验
    优雅的 UI 设计:
    • 气泡式对话界面
    • 打字机效果
    • 平滑的动画过渡
    • 响应式布局

img

img

img

想要了解更多的技术实现细节可以去参考下面这篇分享文章。
Vue3-DeepSeek流式AI聊天|vite6+vant4+deepseek智能ai对话助手

收起阅读 »

最近更新的HBuilder,卡巴基斯频繁警报并删除Hbuilder

木马

事件: 检测到恶意对象
应用程序: HBuilder X
用户: X\xzm
用户类型: 活动用户
组件: 系统监控
结果说明: 检测到
类型: 木马
名称: PDM:Trojan.Win32.Generic
威胁级别: 高
对象类型: 进程
对象路径: d:\developertools\hbuilderx
对象名称: hbuilderx.exe
原因: 数据库
数据库发布日期: 昨天,2025/3/15 20:55:00

继续阅读 »

事件: 检测到恶意对象
应用程序: HBuilder X
用户: X\xzm
用户类型: 活动用户
组件: 系统监控
结果说明: 检测到
类型: 木马
名称: PDM:Trojan.Win32.Generic
威胁级别: 高
对象类型: 进程
对象路径: d:\developertools\hbuilderx
对象名称: hbuilderx.exe
原因: 数据库
数据库发布日期: 昨天,2025/3/15 20:55:00

收起阅读 »

有懂uniapp+unicloud+uview的小伙伴想可以联系呀!

uview uniCloud uniapp

最近我想开发一个项目是小程序类的,部分页面需要小伙伴协助开发
如果你懂得uniapp+unicloud+uview那么非常欢迎您联系我呀
有偿的,有偿,有偿!重要的事情说三遍。
兼职类的哦不是全职,欢迎联系呀。

最近我想开发一个项目是小程序类的,部分页面需要小伙伴协助开发
如果你懂得uniapp+unicloud+uview那么非常欢迎您联系我呀
有偿的,有偿,有偿!重要的事情说三遍。
兼职类的哦不是全职,欢迎联系呀。

关于 uni 安全加固 - 腾讯云加固产品下线的公告

加固

因供应商调整,腾讯云安全加固产品将于2025年4月1日下线,请改用支付宝提供的加固。收费标准不变:测试版免费,正式版600元/次。

  • 如有 uni 安全加固相关功能建议或问题,可加入 uni-im交流群讨论,点此加入
  • uni安全加固使用手册。详见
继续阅读 »

因供应商调整,腾讯云安全加固产品将于2025年4月1日下线,请改用支付宝提供的加固。收费标准不变:测试版免费,正式版600元/次。

  • 如有 uni 安全加固相关功能建议或问题,可加入 uni-im交流群讨论,点此加入
  • uni安全加固使用手册。详见
收起阅读 »

自动化测试, 一直报Failed to connect to runtime,调试自定义基座

自动化测试

我一直报错是因为在 env.js 里面设置了自定义基座,设置的不正确。
两种解决方案
1、不跑自定义基座,把env.js、jest.config.js 删除掉,重新自动化测试,他会重新生成初始文件就可以跑app标准基座了

2、根据我下面的图片,在env.js 里面设置自定义基座配置,自定义基座的包路径一定要正确。

继续阅读 »

我一直报错是因为在 env.js 里面设置了自定义基座,设置的不正确。
两种解决方案
1、不跑自定义基座,把env.js、jest.config.js 删除掉,重新自动化测试,他会重新生成初始文件就可以跑app标准基座了

2、根据我下面的图片,在env.js 里面设置自定义基座配置,自定义基座的包路径一定要正确。

收起阅读 »

uni-steps 组件左侧的线和点显示异常

uni-app

描述:
uni-app 开发微信小程序,uni-steps 组件左侧的线和点显示异常。

解决办法:
在 uni-steps 组件上加一个判断,当列表不为空的时候才渲染组件,下面示例代码中 listArry 就是节点列表。

<uni-steps v-if="listArry.length > 0" ></uni-steps>

原因:
uni-steps 组件渲染时会获取右侧文本的高度,并且 +1 后作为左侧点线的高度,当节点列表为空,右侧没有文本信息,获取到的高度是 undefined,导致显示异常。

继续阅读 »

描述:
uni-app 开发微信小程序,uni-steps 组件左侧的线和点显示异常。

解决办法:
在 uni-steps 组件上加一个判断,当列表不为空的时候才渲染组件,下面示例代码中 listArry 就是节点列表。

<uni-steps v-if="listArry.length > 0" ></uni-steps>

原因:
uni-steps 组件渲染时会获取右侧文本的高度,并且 +1 后作为左侧点线的高度,当节点列表为空,右侧没有文本信息,获取到的高度是 undefined,导致显示异常。

收起阅读 »

IOS系统的input文本框的输入法有问题

input iOS

iPhone手机, input文本框弹出的输入法只有繁体手写功能,没有键盘。
此时我把手机的地区从mei国改成zhongguodalu就正常了。

iPhone手机, input文本框弹出的输入法只有繁体手写功能,没有键盘。
此时我把手机的地区从mei国改成zhongguodalu就正常了。

4.5起vue2项目sass编译器调整导致sass报错;HBuilderX 发布Mac arm专版和linux cli版

公告

1.vue2项目sass编译器调整

HBuilderX 4.5+起,vue2的sass编译器由node-sass改为dart-sass。node-sass是已经被淘汰的不再维护的库,且不支持arm cpu。
node-sass有些过期语法在dart-sass上报错导致无法编译。
虽然默认为dart-sass,但HBuilderX 4.56版也提供了选项,可以手动选择node-sass。在manifest.json中根节点配置"sassImplementationName": "node-sass"。
注意这个回退选项的生效范围是:vue2项目且HBuilderX不是arm版。
vue3一直都是dart-sass,不需要node-sass的选项;
node-sass本身不支持arm cpu。
如果开发者的mac电脑是arm cpu且仍想要为vue2项目使用node-sass,需要改用HBuilderX的mac intel cpu版。intel 版也可以以兼容模式在mac的arm cpu上运行。

当然我们仍然推荐开发者修改不兼容的代码,适配dart-sass,这2种sass编译器的常见语法差异及修改方案见:文档

HBuilderX 4.55没有回退选项,请开发者升级到HBuilderX 4.56。

2. HBuilderX Mac版推出了arm专版,适配M系列CPU

在HBuilderX官网下载时,请注意选择mac的intel版(也称为x86版)和arm版(也称为m系列cpu版)。
intel版也可以用于arm CPU。但arm版仅能在M系列CPU上运行。
下载地址详见:https://www.dcloud.io/hbuilderx.html

注意node-sass自身不支持arm,所以arm版HBuilderX仅能使用dart-sass。

3. HBuilderX在linux平台推出了cli版本,方便工程自动化和持续集成

详见

继续阅读 »

1.vue2项目sass编译器调整

HBuilderX 4.5+起,vue2的sass编译器由node-sass改为dart-sass。node-sass是已经被淘汰的不再维护的库,且不支持arm cpu。
node-sass有些过期语法在dart-sass上报错导致无法编译。
虽然默认为dart-sass,但HBuilderX 4.56版也提供了选项,可以手动选择node-sass。在manifest.json中根节点配置"sassImplementationName": "node-sass"。
注意这个回退选项的生效范围是:vue2项目且HBuilderX不是arm版。
vue3一直都是dart-sass,不需要node-sass的选项;
node-sass本身不支持arm cpu。
如果开发者的mac电脑是arm cpu且仍想要为vue2项目使用node-sass,需要改用HBuilderX的mac intel cpu版。intel 版也可以以兼容模式在mac的arm cpu上运行。

当然我们仍然推荐开发者修改不兼容的代码,适配dart-sass,这2种sass编译器的常见语法差异及修改方案见:文档

HBuilderX 4.55没有回退选项,请开发者升级到HBuilderX 4.56。

2. HBuilderX Mac版推出了arm专版,适配M系列CPU

在HBuilderX官网下载时,请注意选择mac的intel版(也称为x86版)和arm版(也称为m系列cpu版)。
intel版也可以用于arm CPU。但arm版仅能在M系列CPU上运行。
下载地址详见:https://www.dcloud.io/hbuilderx.html

注意node-sass自身不支持arm,所以arm版HBuilderX仅能使用dart-sass。

3. HBuilderX在linux平台推出了cli版本,方便工程自动化和持续集成

详见

收起阅读 »