uni-app vue3 在h5中打包后uni.xxx的大多数方法都没了
uni-app vue3 在h5中打包后uni.xxx的大多数方法都没了
信息类别 | 详情 |
---|---|
产品分类 | uniapp/H5 |
PC开发环境 | Mac |
版本号 | 10.15.2 |
浏览器 | Chrome |
浏览器版本 | 100.0.4896.60 |
项目创建方式 | CLI |
CLI版本号 | 4.5.3 |
操作步骤:
console.log(uni)
预期结果:
uni.request 成功运行
实际结果:
uni.request is not a function
bug描述:
我发行以后发现request 报错了,仔细查看一番后发现是uni.request 没有这个方法,然后打印了uni看到很多方法都没了
vue3在h5平台发行时,为了优化包体积大小,会默认启动摇树,仅打包明确使用的api,比如uni.request()这种使用方式,而动态调用const method=‘request’;unimethod不识别
如果要关闭摇树,可以在manifest.json中配置
“h5”: {
“optimization”: {
“treeShaking”: {
“enable”: false
}
}
}
已经没事了哥哥们
回复 2***@qq.com: 怎么解决的呢
吓得我赶紧打个包试试,我APP-NVUE自定义基座uni.request正常,uni.getSavedFileList is not a function和你一样
开发环境是没有问题的
生产环境才会出现
哥哥们这咋回事
使用npx @dcloudio/uvm将cli更新到最新版试试
好的我试试
还是不行
更新最新班后packages 的更改为了"@dcloudio/uni-app": "^3.0.0-alpha-3031320220314002"还是不行,为有试过0325的版本依旧不行,你们有复现到吗?
回复 2***@qq.com: 我试了没有重现问题。你可以创建一个测试工程试试能否重现么
回复 BoredApe: 可以发一个你的模版给我看看吗?
回复 BoredApe: 我用的是vite+ts的
已经好了,谢谢你
上架ios谷歌都可以找我q2710697845
在 uni-app
中,当你使用 Vue 3 开发 H5 应用时,可能会遇到 uni.xxx
方法在打包后无法使用的问题。这是因为 uni-app
在 H5 环境下,某些 API 的实现可能与小程序环境不同,或者在 H5 环境下不支持某些 API。
可能的原因和解决方案:
-
H5 环境下不支持某些 API:
uni-app
的某些 API 是专门为小程序设计的,在 H5 环境下可能没有对应的实现。例如,uni.showToast
、uni.getSystemInfo
等在小程序中有对应的实现,但在 H5 中可能没有。- 解决方案:在 H5 环境下,可能需要使用原生的 JavaScript 或浏览器 API 来替代这些功能。例如,使用
alert
或console.log
代替uni.showToast
。
-
跨平台兼容性问题:
uni-app
的 API 设计是为了跨平台兼容性,但在不同平台上,API 的行为可能有所不同。在 H5 环境下,某些 API 可能没有实现或实现方式不同。- 解决方案:在代码中根据平台进行条件判断,使用不同的实现。例如:
if (process.env.VUE_APP_PLATFORM === 'h5') { // H5 环境下的实现 alert('This is a toast message in H5'); } else { // 其他平台下的实现 uni.showToast({ title: 'This is a toast message', icon: 'none' }); }
-
打包时未正确处理 H5 环境:
- 在打包时,可能需要确保 H5 环境的配置正确,以便正确处理
uni.xxx
方法。 - 解决方案:检查
manifest.json
和pages.json
等配置文件,确保 H5 环境的配置正确。
- 在打包时,可能需要确保 H5 环境的配置正确,以便正确处理
-
使用
uni-app
官方推荐的 H5 API:uni-app
提供了一些专门为 H5 环境设计的 API,例如uni.request
、uni.navigateTo
等。在 H5 环境下,尽量使用这些官方推荐的 API。- 解决方案:查阅
uni-app
官方文档,找到适合 H5 环境的 API 替代方案。
示例代码:
<template>
<div>
<button @click="showToast">Show Toast</button>
</div>
</template>
<script setup>
import { ref } from 'vue';
const showToast = () => {
if (process.env.VUE_APP_PLATFORM === 'h5') {
alert('This is a toast message in H5');
} else {
uni.showToast({
title: 'This is a toast message',
icon: 'none'
});
}
};
</script>