主题
项目介绍与 uni-app 基础(一)
本页对应 项目介绍与 uni-app 基础,共 7 段视频,约 51 分钟。
学习目标
- 能独立完成 HBuilderX 的下载、安装与首次启动配置,并将编辑器主题与快捷键方案设置为 VS Code 风格。
- 能使用 HBuilderX 创建 uni-app 项目,正确选择默认模板与 Vue3 版本,并将项目存放在规范目录中。
- 能将创建好的 uni-app 项目分别运行到浏览器(H5)和微信小程序端,并说明两端运行结果的对应关系。
- 能配置微信小程序运行环境,包括在 manifest 中填写 AppID、在微信开发者工具中开启服务端口,并能解决 HBuilderX 无法自动打开微信开发者工具时的手动路径配置问题。
- 能完成安卓真机运行环境配置,包括开启开发者选项与 USB 调试、安装真机运行插件与 ADB 驱动,并在 HBuilderX 中识别设备后运行项目。
- 能用自己的话说明 uni-app 跨端开发的含义,并列举其可运行的目标端(H5、小程序、App)及一套代码多端运行的基本优势。
知识点
本节目标与整体思路
本节要掌握三件事:创建 uni-app 项目、把项目运行到浏览器/小程序、配置 Android 真机运行环境。转写稿里反复强调,这一节“操作多、理解少”,遇到错误不用慌,可以按步骤从头重做,直到环境正常运行。
为什么需要:uni-app 的核心价值是“跨端开发”,一套代码可生成 H5、小程序、App 等多端项目;但跨端项目要先有可运行的开发环境,否则后面写页面、调接口都无从谈起。
怎么想:先装工具 HBuilderX,再建一个最干净的默认模板项目,然后分别验证浏览器端、小程序端,最后接 Android 真机。
怎么做:按“安装工具 → 创建项目 → 运行 H5 → 运行小程序 → 配置真机”的顺序推进。
易错点:HBuilderX 不要放中文目录;创建项目不要选错模板和 Vue 版本;小程序要填 AppID 并打开微信开发者工具服务端口;真机要开 USB 调试并装驱动。
安装 HBuilderX
为什么需要:HBuilderX 是 DCloud 推出的开发工具,类似 VS Code,但针对 uni-app 做了运行到浏览器、小程序、手机等集成能力。
怎么想:把 HBuilderX 当成“uni-app 专用编辑器”,先保证它能正常启动,再谈建项目。
怎么做:Windows 下载压缩包,解压后找到 HBuilderX.exe 双击启动,建议创建桌面快捷方式;Mac 下载 .dmg 后拖入安装。首次启动按喜好选主题,快捷键风格建议选 VS Code,便于延续已有习惯。
易错点:Windows 下千万不要把 HBuilderX 放在中文目录中;关闭时若提示创建快捷方式,建议选择“是”,方便后续启动。

用 HBuilderX 创建 uni-app 项目
为什么需要:后续课程项目“神领物流”是 uni-app 项目,需要先有一个标准工程骨架。
怎么想:学习阶段选“默认模板”,因为初始代码最少、项目最干净,便于在空白基础上理解结构。
怎么做:菜单栏选择【文件】→【新建】→【项目】,项目类型选 uni-app,模板选默认模板,Vue 版本选 Vue3;项目目录要放在自己常用、规范的资料目录中,项目名可自定义。创建后能看到目录和文件,其中 .vue 文件就是 Vue 单文件组件,包含模板、脚本、样式。
易错点:不要把项目类型选成普通 Vue 或其他模板;Vue 版本按课程统一选 Vue3;目录不要随手乱放,便于以后复习和查找。



vue-cli 方式说明与代码保留
笔记还提到可用 vue-cli 创建项目。转写稿说明:CLI 方式可用 VS Code 开发,但运行到手机/模拟器等能力不如 HBuilderX 集成方便;本次课程不采用该方式,因此不展开命令。原笔记此处保留了 CLI 创建入口的代码块:
bash
易错点:不要因为看到 CLI 方式就混用两套流程;本节统一用 HBuilderX 创建和运行。
运行到浏览器与微信小程序
为什么需要:创建项目后必须验证工程是否能编译运行,同时直观看到 uni-app 的跨端效果。
怎么想:先跑浏览器端,因为最简单;再跑微信小程序,因为它需要额外配置微信开发者工具。
怎么做:在 HBuilderX 中点击“运行”,先运行到浏览器,等待编译完成会自动打开页面,切换到手机模式即可看 H5 效果。运行小程序前,要在项目 manifest 中填写微信小程序 AppID;打开微信开发者工具,在【设置】→【安全设置】中打开服务端口;再在 HBuilderX 选择运行到微信小程序,工具会自动编译并拉起微信开发者工具。若 HBuilderX 不能自动打开微信开发者工具,需要在 HBuilderX 中配置微信开发者工具的安装目录。
易错点:服务端口默认可能是关闭的,必须打开;端口号每个人可能不同,打开即可;HBuilderX 中红色提示不一定代表报错,转写稿特别提醒它有时只是重点提示;未填 AppID 可能进入游客模式。
Android 真机运行环境
为什么需要:课程项目包含 App 端,最终要把应用跑到手机上验证。
怎么想:Android 建议优先用真机,调试和性能更直接;模拟器往往要装 Android Studio 并虚拟手机,占内存、易卡顿。苹果真机需要证书成本,课程环境以 Android 真机为主。
怎么做:首次在 HBuilderX 点“运行到手机或模拟器”,按提示下载真机运行插件;手机进入【设置】→【系统】→【关于手机】,连续点击“版本号”直到开启开发者模式;返回系统设置找到“开发者选项”,打开“USB 调试”;用支持数据传输的数据线连接电脑。若 HBuilderX 识别不到设备,运行群里的 ADB Driver Installer.exe,识别到设备后点 Install 安装驱动,然后重启 HBuilderX,再运行到 Android App。
易错点:数据线可能是充电线,无法传数据;没开 USB 调试或没装驱动会识别不到手机;装完驱动建议重启 HBuilderX;不同品牌手机界面略有差异,但“开发者选项”和“USB 调试”是关键。
小结与检查清单
检查:HBuilderX 能否启动且不在中文目录;项目是否用默认模板、Vue3 创建;浏览器端是否运行成功;微信开发者工具服务端口是否打开、AppID 是否填写;Android 手机是否开启开发者选项和 USB 调试、驱动是否安装、HBuilderX 是否识别到设备。按转写稿建议,出错就从头复核步骤,直到环境正常运行。
先建立整体认识:Vue 语法 + 小程序能力
为什么需要:uni-app 组合了 Vue 和微信小程序的相关技术,学习前要同时具备 Vue 与原生小程序基础。怎么想:把全局文件对应到小程序的 app.js/app.wxss/app.json,把组件、API、生命周期对应到小程序能力,同时用 Vue 的模板与组件写法开发。怎么做:用 HBuilderX 新建 uni-app 项目,模板选默认、Vue 版本选 Vue3;先运行到浏览器看 H5,再运行到微信小程序,最后配置真机运行 App。易错点:创建项目时不要选错模板和 Vue 版本;转写稿里的“神领物流”“HBuilderX”“VS Code”“AppID”等同音字要按正确名称理解。
uni.scss:统一全局样式变量
为什么需要:页面主色调、边框圆角等样式如果分散写,后期难统一。怎么想:uni-app 运行时会自动把 uni.scss 注入页面样式,所以可在这里定义全局 SASS 变量。怎么做:在原有 SASS 变量基础上追加变量,例如:
css
/* uni.scss */
/* 在原有 sass 变量基础上添加新的变量 */
$uni-bg-color: #f4f4f4;易错点:变量要在支持 SCSS 的样式环境中使用;不要误以为它等同于普通 CSS 全局类。
App.vue:应用入口与全局样式
为什么需要:应用启动、显示、隐藏等全局逻辑,以及页面全局背景色,需要一个统一入口。怎么想:App.vue 是特殊文件:script 相当于小程序 app.js,style 相当于 app.wxss,template 必须省略。怎么做:
html
<script>
// 相当于小程序的 app.js
export default {
onLaunch: function () {
console.log('App Launch')
},
onShow: function () {
console.log('App Show')
},
onHide: function () {
console.log('App Hide')
},
}
</script>
<!-- 组件模板需要被省略 -->
<template></template>
<!-- 组件模板需要被省略 -->
<style>
/* 相当于 app.wxss */
page {
background-color: $uni-bg-color;
}
</style>为其指定 lang="scss" 后,会自动安装 dart-sass 插件。
易错点:template 不要写实际页面结构;使用 $uni-bg-color 时样式需具备 SCSS 处理能力。
pages.json:页面配置与全局配置
为什么需要:项目要有页面路径、导航栏、背景色、tabBar、分包等配置。怎么想:pages 是页面配置,globalStyle 对应全局 window;其他全局配置如 tabBar、subPackages 与 globalStyle 平级。怎么做:
json
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "学习uni-app"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"uniIdRouter": {}
}tabBar 与 subPackages 也按平级方式配置。易错点:tabBar 的图片必须放到 static 目录下,否则小程序中无法运行;页面 path 要真实存在。
组件:内置组件与扩展组件
为什么需要:跨端开发要尽量保证组件表现一致。怎么想:内置组件参照微信小程序内置组件使用;扩展组件(uni ui)多用于倒计时、日历、文件上传等业务交互,需要下载到项目目录。怎么做:
xml
<view class="message">hello uni-app!</view>
<image src="" mode="" />
<swiper autoplay>
<swiper-item>
<image src="" />
</swiper-item>
<swiper-item>
<image src="" />
</swiper-item>
<swiper>
易错点:扩展组件不是默认全部可用,需按文档下载引入;笔记提示 uView 不支持 Vue3。
生命周期:应用/页面用小程序,组件用 Vue
为什么需要:应用、页面、组件职责不同,生命周期不能混用。怎么想:记原则——应用生命周期和页面生命周期采用小程序生命周期,自定义组件生命周期使用 Vue 生命周期。Vue3 setup 中,应用/页面生命周期从 @dcloudio/uni-app 导入,Vue 生命周期从 vue 导入。怎么做:
html
<script setup>
// Vue 组件生命周期
import { onMounted } from 'vue'
// 应用/页面生命周期(小程序生命周期)
import { onLaunch, onLoad } from '@dcloudio/uni-app'
// ...
</script>易错点:笔记表格中 onLauch 是拼写笔误,代码中应写 onLaunch;activated/deactivated 仅 H5 可用,不要当作全端通用。
API 调用:命名空间与 Promise
为什么需要:小程序 API 多以 wx. 开头,uni-app 要跨端统一。怎么想:把 wx.request 换成 uni.request;传了 success/fail/complete 任意回调就是 callback 方式,不返回 Promise;不传回调则返回 Promise。怎么做:
html
<script setup>
import { onLoad } from '@dcloudio/uni-app'
// 页面加载后获取接口数据
onLoad(() => {
// 原来的 wx.request 换成 uni.request
uni.request({
url: '',
success(result) {
console.log(result)
}
})
})
</script>javascript
// 回调方式,不返回 Promise
uni.request({
url: 'https://your.api.com/xxx',
success: (result) => {
console.log(result)
}
})
// 没有传入回调时返回 Promise
const result = uni.request({
url: 'https://your.api.com/xxx'
})
console.log(result)易错点:不要既写 success 又 await 返回值;H5 平台对部分 API 限制较多。
条件编译:处理平台差异
为什么需要:一套代码跨端,但 uni.login 在 H5 不支持、keep-alive 只能用于 H5 等差异客观存在。怎么想:用特殊注释标记,让代码只在指定平台编译。怎么做:
html
<script setup>
// #ifdef H5
console.log('这段代码只在 H5 端才会运行')
// #endif
</script>
<template>
<!-- #ifdef H5 -->
<view class="iconfont icon-search"></view>
<!-- #endif -->
<!-- #ifndef H5 -->
<view class="iconfont icon-scan"></view>
<!-- #endif -->
</template>
<style lang="scss" scoped>
.iconfont {
color: #666;
font-size: 30rpx;
/* #ifdef H5 */
font-size: 28rpx;
/* #endif */
}
</style>平台名包括 H5、MP-WEIXIN、APP-PLUS 等。易错点:注释位置要符合 script/template/style 各自语法;平台名称不要随意改写。
运行与调试:H5、小程序、真机
为什么需要:uni-app 的价值是跨端,必须实际跑通。怎么想:HBuilderX 点“运行”可到浏览器;到微信小程序前,要先在微信开发者工具“设置→安全设置”打开服务端口,并在项目配置中填 AppID;真机运行要下载真机运行插件。怎么做:手机开启“开发者选项”和“USB 调试”,连接电脑;识别不到设备时换支持数据传输的数据线,必要时用 ADBDriverInstaller 安装驱动后重启 HBuilderX。易错点:转写稿里“manf”指项目配置文件 manifest.json;红色提示不一定是报错,要结合 HBuilderX 提示判断。
代码示例
示例一:全局文件 —— uni.scss 与 App.vue
css
/* uni.scss */
/* 在原有 sass 变量基础上添加新的变量 */
$uni-bg-color: #f4f4f4;html
<!-- App.vue -->
<script>
// 相当于小程序的 app.js
export default {
onLaunch: function () {
console.log('App Launch')
},
onShow: function () {
console.log('App Show')
},
onHide: function () {
console.log('App Hide')
},
}
</script>
<!-- 组件模板需要被省略 -->
<template></template>
<!-- 组件模板需要被省略 -->
<style>
/* 相当于 app.wxss */
page {
background-color: $uni-bg-color;
}
</style>要点解释
uni.scss会在运行时被自动注入到每个页面的样式中,因此适合放主色调、圆角这类全局 SASS 变量;上例新增了$uni-bg-color,在任意页面都能直接引用。App.vue的script相当于小程序的app.js,只能写应用级生命周期(onLaunch / onShow / onHide)。- 易错点 1:
App.vue的<template></template>必须保留但内容为空,不要在这里写页面结构。 - 易错点 2:
style中若要用 SASS 变量,需给标签加lang="scss",此时 HBuilder X 会自动安装dart-sass插件;不加lang直接写变量会报错。 - 易错点 3:
page { }选择器作用于全局页面容器,等价于小程序的app.wxss,写在这里的样式会影响所有页面。
示例二:pages.json —— 页面配置 + 全局配置 + tabBar / 分包
json
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "学习uni-app"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"tabBar": {
"color": "",
"selectedColor": "",
"borderStyle": "",
"position": "",
"list": [
{
"text": "",
"pagePath": "",
"iconPath": "",
"selectedIconPath": ""
}
]
},
"subPackages": [
{
"root": "",
"pages": [
{
"path": "",
"style": {}
}
]
}
],
"uniIdRouter": {}
}要点解释
pages数组对应【页面配置】:path指定页面路径,style是该页面的窗口配置(标题、背景色等)。数组第一项就是启动页。globalStyle对应小程序全局配置中的window,用于全局统一导航栏与背景色。- 关键行:
tabBar、subPackages这些其它全局配置,都是与globalStyle平级书写,不是嵌套在globalStyle里——这是最常见的结构错误。 - 易错点 1:
tabBar的iconPath/selectedIconPath图片必须放在static目录下,否则小程序端无法运行。 - 易错点 2:
tabBar.list中的pagePath必须在pages数组里已注册过,否则点击报错。 - 易错点 3:
subPackages中root是分包根目录,其下pages的path只写相对root的路径。
示例三:页面文件 —— 生命周期 + API 调用 + 条件编译
html
<script setup>
// Vue 组件生命周期
import { onMounted } from 'vue'
// 应用/页面生命周期(小程序生命周期)
import { onLaunch, onLoad } from '@dcloudio/uni-app'
// 页面加载后获取接口数据
onLoad(() => {
// 原来的 wx.request 换成 uni.request
uni.request({
url: 'https://your.api.com/xxx',
success(result) {
console.log(result)
}
})
})
// #ifdef H5
console.log('这段代码只在 H5 端才会运行')
// #endif
</script>
<template>
<!-- #ifdef H5 -->
<view class="iconfont icon-search"></view>
<!-- #endif -->
<!-- #ifndef H5 -->
<view class="iconfont icon-scan"></view>
<!-- #endif -->
</template>
<style lang="scss" scoped>
.iconfont {
color: #666;
font-size: 30rpx;
/* #ifdef H5 */
font-size: 28rpx;
/* #endif */
}
</style>要点解释
- 关键行 1:
onLoad等页面生命周期必须从@dcloudio/uni-app引入,onMounted等 Vue 生命周期从vue引入,两者来源不同,混用会直接报错。 - 关键行 2:
uni.request中传入了success回调,因此这次调用走 callback 方式、不返回 Promise;只有不传success / fail / complete任意一个时,才返回 Promise,才能配合async / await。 - 关键行 3:条件编译标记是特殊注释,
#ifdef H5…#endif之间的代码只编译进 H5 端;#ifndef H5反之,即“除 H5 之外的所有平台”。 - 易错点 1:
onLaunch属于应用级生命周期,只有写在App.vue中才生效,写在页面里不会触发(页面只支持onLoad / onShow / onHide / onReady)。 - 易错点 2:条件编译注释在
<template>中要用 HTML 注释<!-- #ifdef H5 -->,在<script>/<style>中要用对应语言的注释语法//或/* */,注释符号写错则完全不生效。 - 易错点 3:条件编译是编译期剔除代码,而不是运行期判断,因此被剔除的分支里即使有语法错误也不会影响其它平台,但也不要用它来做运行时分支逻辑。
常见错误
HBuilderX 启动异常或项目创建失败
现象:双击无法启动、创建项目报错或后续编译异常。
原因:HBuilderX 被解压/安装到中文目录或路径含特殊字符。
修法:将 HBuilderX 移至纯英文、无空格目录后重新启动,并重新选择规范的项目目录。运行到微信小程序时无法自动拉起开发者工具
现象:HBuilderX 提示找不到微信开发者工具,或运行后无反应。
原因:未配置微信开发者工具安装目录,或开发者工具“服务端口”未开启。
修法:在 HBuilderX 中填写微信开发者工具安装目录(到目录层级,不带.exe),并在微信开发者工具“设置→安全设置”中开启服务端口。小程序运行时提示游客模式或 AppID 相关异常
现象:微信开发者工具以游客模式运行,部分能力不可用。
原因:manifest.json中未填写微信小程序 AppID。
修法:在manifest.json的微信小程序配置中填入 AppID,保存后重新运行到微信小程序。运行到 Android 真机时 HBuilderX 看不到设备
现象:点击“运行到手机或模拟器”后没有设备列表,或列表为空。
原因:手机未开启开发者选项/USB 调试、数据线仅支持充电、ADB 驱动未安装。
修法:连续点击版本号开启开发者选项,打开 USB 调试;更换可传输数据的数据线;使用 ADB Driver Installer 识别设备并安装驱动,重启 HBuilderX 后重试。首次运行到 App 时没有“运行到 Android”选项
现象:菜单中只提示下载真机运行插件,无法选择 Android 设备。
原因:HBuilderX 尚未安装真机运行插件,或插件下载因网络失败。
修法:按提示下载并安装真机运行插件;网络不稳定时重复尝试,必要时使用离线方式安装后再运行。看到 HBuilderX 控制台红色信息就误判为报错
现象:运行过程中出现红色提示,误以为项目失败并中断操作。
原因:HBuilderX 会用红色突出部分提示信息,不一定代表错误。
修法:结合提示内容和运行结果判断;若能正常编译并打开目标端,先继续验证页面是否正常运行。
练习
- 使用 HBuilderX 创建一个 Vue3、默认模板的 uni-app 项目,项目目录放在纯英文路径下,并分别运行到 Chrome(H5)和微信小程序。
- 检查并配置微信开发者工具:开启服务端口,在
manifest.json中填写微信小程序 AppID,然后重新运行到微信小程序,确认不再处于游客模式。 - 使用 Android 真机完成一次运行:开启开发者选项与 USB 调试,连接电脑,确保 HBuilderX 能识别设备后运行到 Android App。
- 故意制造一次“HBuilderX 看不到真机”的情况(如换用仅充电数据线或关闭 USB 调试),记录现象,再按“数据线→USB 调试→ADB 驱动→重启 HBuilderX”的顺序排查并恢复。
- 分别观察 H5、微信小程序、Android App 三端的运行结果,记录同一页面在三端启动方式和运行入口上的差异。
原视频对照
| # | 视频 | 时长 |
|---|---|---|
| 1 | 项目及课程介绍 | 12:18 |
| 2 | HBuilderX安装 | 03:17 |
| 3 | HBuilderX创建项目 | 04:19 |
| 4 | HBuilderX运行项目 | 13:04 |
| 5 | 微信小程序运行问题 | 03:07 |
| 6 | HBuilder真机运行环境-1 | 12:32 |
| 7 | HBuilder真机运行环境-2 | 02:36 |
小结
- 环境搭建的核心不是记忆步骤,而是能独立完成“创建项目→运行 H5→运行小程序→运行真机”的闭环。
- HBuilderX 路径和项目路径要规范,优先使用纯英文、无特殊字符目录,能减少大量隐性问题。
- 微信小程序运行依赖两个关键配置:开发者工具服务端口开启、HBuilderX 正确填写开发者工具安装目录。
- AppID、真机运行插件、USB 调试、ADB 驱动和数据线质量,是 Android 真机运行的主要排查点。
- 运行到不同端时,失败原因通常来自“工具配置”和“设备连接”,应先按链路逐项排查,而不是反复改业务代码。
- 遇到红色提示先判断是否为错误信息;以目标端是否成功编译、页面是否正常打开作为最终判断依据。
- 练习时应保留每一步的操作结果和报错现象,形成可复用的排错顺序,这比单纯重复操作更有价值。