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看到很多方法都没了

bug图片

17 回复

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。

可能的原因和解决方案:

  1. H5 环境下不支持某些 API

    • uni-app 的某些 API 是专门为小程序设计的,在 H5 环境下可能没有对应的实现。例如,uni.showToastuni.getSystemInfo 等在小程序中有对应的实现,但在 H5 中可能没有。
    • 解决方案:在 H5 环境下,可能需要使用原生的 JavaScript 或浏览器 API 来替代这些功能。例如,使用 alertconsole.log 代替 uni.showToast
  2. 跨平台兼容性问题

    • 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'
        });
      }
  3. 打包时未正确处理 H5 环境

    • 在打包时,可能需要确保 H5 环境的配置正确,以便正确处理 uni.xxx 方法。
    • 解决方案:检查 manifest.jsonpages.json 等配置文件,确保 H5 环境的配置正确。
  4. 使用 uni-app 官方推荐的 H5 API

    • uni-app 提供了一些专门为 H5 环境设计的 API,例如 uni.requestuni.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>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!