uView 2.x需npm安装uview-ui@2.0.38,main.js中import路径须为'uview-ui'且置于Vue.use(uView)后;easycom须在pages.json根级配置"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue";App.vue的@import必须首行且lang="scss"。

npm install 后 main.js 报错“Cannot find module 'uview-ui'”
说明你装的是 uview-plus(Vue3 专用)但按 uView 2.x 文档写了 import uView from 'uview-ui',或者路径写错了。uView 2.x 和 uView Plus 是两个不同包,不能混用。
实操建议:
- 确认安装命令:Vue2 项目必须用
npm install uview-ui@2.0.38;Vue3 项目必须用npm install uview-plus - 检查 node_modules 下是否存在对应文件夹:
uview-ui或uview-plus,不存在就重装 - main.js 中 import 路径要和包名完全一致,比如装了
uview-ui就不能写成import uView from '@/uni_modules/uview-ui'(那是下载方式的路径) - 如果用了 HBuilderX 的 uni_modules 导入,就别走 npm 安装流程,二者配置方式完全不同
pages.json 配置 easycom 后组件仍不识别
常见原因是正则匹配规则没生效,或配置位置不对。easycom 不是“写了就自动好”,它依赖 pages.json 的顶层结构和 key 名称。
实操建议:
-
"easycom"必须是pages.json根对象的直接子属性,不能嵌在"h5"或"mp-weixin"下 - 匹配规则要严格对应组件命名:uView 2.x 的组件前缀是
u-,所以必须写"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue",少一个u-或多一个斜杠都会失败 - 确保组件路径真实存在:打开
node_modules/uview-ui/components/u-button/看是否有u-button.vue,没有说明包损坏或版本错乱 - HBuilderX 用户注意:保存 pages.json 后需手动重启服务,热更新不会触发 easycom 重新扫描
App.vue 引入 index.scss 后样式全乱或不生效
根本原因通常是 @import 没写在 style 标签第一行,或 lang 属性缺失。uni-app 对 App.vue 的 style 解析非常敏感,顺序和属性缺一不可。
实操建议:
-
<style lang="scss"></style>标签内,@import语句必须是第一行内容,前面不能有任何空行、注释或空格 - 路径必须准确:Vue2 项目用
@import "uview-ui/index.scss";Vue3 + uView Plus 则是@import "uview-plus/index.scss" - uni.scss 中的
@import 'uview-ui/theme.scss'是可选的,只影响主题色等变量,删掉不影响基础样式,但删了App.vue里的index.scss就会彻底没样式 - 如果用了 scss 变量自定义主题,务必确认
uni.scss在App.vue之前加载(uni.scss 是全局预编译入口)
uni.$u.config.unit = 'rpx' 不生效
这个配置必须在 Vue.use(uView) 之后、任何页面渲染之前执行,且不能放在异步回调里。很多开发者把它写在 mounted 或 onLaunch 里,此时组件早已按默认 px 渲染完毕。
实操建议:
- 只在
main.js中配置,且紧接在Vue.use(uView)下面一行写:uni.$u.config.unit = 'rpx' - 更稳妥的方式是用
setConfig(2.0.25+ 推荐):uni.$u.setConfig({ config: { unit: 'rpx' } }),它内部做了防重复和时机校验 - 注意:rpx 在 nvue 页面中不支持,仅作用于 vue 页面;如果你项目同时跑 App 和小程序,rpx 可能导致 nvue 页面尺寸异常
- 改完 unit 后,所有带数字单位的 props(如
size、width)都不再需要手动加'rpx'后缀,传数字即可
uni.$u.sleep、uni.$u.throttle)和样式系统是解耦的。哪怕样式全挂了,工具函数照常可用;反过来,样式引入对了,但 main.js 漏了 Vue.use(uView),所有组件的 props 响应式、事件绑定、内部方法都会失效——这时候按钮能显示,但点击没反应,排查起来最费时间。


















