uniapp 出现 uni is not defined 错误如何解决?
在使用uniapp开发时,控制台报错"uni is not defined"该怎么处理?我已经确认引入了uniapp的js文件,但在调用uni.request等API时仍然提示这个错误。请问是哪个环节出了问题?需要检查哪些配置或引入方式?
2 回复
检查是否在非uni-app环境使用uni API,或页面未加载完成就调用。在main.js中确保正确引入Vue和uni-app相关库,检查代码作用域。
在 UniApp 中遇到 uni is not defined 错误,通常是因为在非 UniApp 环境或错误的作用域中使用了 uni 对象。uni 是 UniApp 提供的全局 API,用于调用框架功能(如导航、请求等)。以下是常见原因和解决方法:
1. 在非页面/组件作用域中使用 uni
- 问题:在外部 JS 文件、工具函数或 Vue 组件的
created生命周期之前直接调用uni,可能无法访问全局对象。 - 解决:
- 确保代码在 Vue 组件的
mounted或onLoad生命周期后执行。 - 示例:
export default { onLoad() { uni.showToast({ title: '加载成功' }); // 正确位置 } }
- 确保代码在 Vue 组件的
2. H5 平台特定问题
- 问题:在 H5 端,如果代码在非 UniApp 环境运行(如直接浏览器打开),可能缺少
uni对象。 - 解决:
- 使用条件判断保护代码:
if (typeof uni !== 'undefined') { uni.navigateTo({ url: '/pages/index/index' }); } - 或通过
uni-app官方 H5 部署指南检查配置。
- 使用条件判断保护代码:
3. 第三方库或工具函数问题
- 问题:在独立 JS 文件中直接使用
uni,未通过参数传递或全局检测。 - 解决:
- 将
uni作为参数传入函数:// utils.js export function showError(uni, message) { uni.showModal({ content: message }); } - 或在工具文件中动态检测:
const uni = typeof uni !== 'undefined' ? uni : null; if (uni) { uni.request({ url: 'https://example.com' }); }
- 将
4. Vue 3 组合式 API 注意事项
- 问题:在
setup()中直接使用uni可能未定义。 - 解决:通过
getCurrentInstance访问:import { getCurrentInstance } from 'vue'; export default { setup() { const instance = getCurrentInstance(); instance.appContext.config.globalProperties.uni.navigateBack(); } }
5. 项目配置错误
- 问题:
manifest.json或页面路径配置错误导致框架未初始化。 - 解决:
- 检查
manifest.json中 H5 或各平台配置。 - 运行
npm run dev重新启动开发服务器。
- 检查
6. 其他建议
- 重启开发工具:关闭 HBuilderX 或命令行,重新运行项目。
- 检查 UniApp 版本:更新到最新稳定版(如使用 HBuilderX 自动更新)。
- 查看官方文档:参考 UniApp API 文档 确认用法。
通过以上步骤,通常能解决 uni is not defined 错误。重点是确保代码在正确的 UniApp 环境中执行,并对特殊场景(如 H5 或工具函数)添加兼容处理。

