基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板
<p>最近得空学习了下uniapp结合vue3搭建跨端项目。之前也有使用uniapp开发过几款聊天/仿抖音/后台管理等项目,但都是基于vue2开发。随着vite.js破局出圈,越来越多的项目偏向于vue3开发,就想着uniapp搭配vite4.x构建项目效果会如何?经过一番尝试果然真香~</p><h3>版本信息</h3>
<div class="cnblogs_code">
<pre>HBuilderX: <span style="color: rgba(128, 0, 128, 1)">3.8</span>.<span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">
Vite: </span><span style="color: rgba(128, 0, 128, 1)">4.2</span>.<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
uView</span>-Plus: <span style="color: rgba(128, 0, 128, 1)">3.1</span>.<span style="color: rgba(128, 0, 128, 1)">31</span></pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617074004395-2081949633.jpg"></p>
<h3>创建uniapp+vue3项目</h3>
<p>uniapp官网提供了 <strong>HBuilderX 可视化界面</strong>、<strong>vue-cli命令行 </strong>两种方式快速构建项目。</p>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617072324959-1812712686.png"></p>
<p>这次主要讲解通过hbuilderx可视化编辑器创建项目。</p>
<ul>
<li>点击编辑器的文件 > 新建 > 项目(快捷键Ctrl+N)</li>
</ul>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617073210240-2100519722.png"></p>
<ul>
<li>选择uni-app项目,输入项目名/路径,选择项目模板,<strong>勾选vue3版本</strong>,点击创建,即可成功创建。</li>
</ul>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617073125152-238579915.png"></p>
<p>点击编辑器的运行 > 运行到浏览器 > 选择浏览器</p>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617074259042-165806752.png"></p>
<p>当然也可以运行到手机或模拟器、运行到小程序工具。</p>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617074421165-2020469475.png"></p>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617074558064-1389273424.png"></p>
<p>到这里一个简单的uniapp+vue3项目就搭建好了。</p>
<h3>App.vue setup语法</h3>
<p>创建的项目,app.vue是使用vue2写法,如果习惯setup语法糖编码,则改为如下方式,生命周期是通过import引入方式。</p>
<div class="cnblogs_code">
<pre><script setup><span style="color: rgba(0, 0, 0, 1)">
import { onLaunch, onShow, onHide } from </span>'@dcloudio/uni-app'<span style="color: rgba(0, 0, 0, 1)">
onLaunch(() </span>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'App Launch!'<span style="color: rgba(0, 0, 0, 1)">)
})
onShow(() </span>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'App Show!'<span style="color: rgba(0, 0, 0, 1)">)
})
onHide(() </span>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(</span>'App Hide!'<span style="color: rgba(0, 0, 0, 1)">)
})
</span></script></pre>
</div>
<h3>uniapp+pinia状态管理</h3>
<p>uni-app已经内置了vuex和pinia两个状态管理,不需要安装即可使用。这次主要讲解下uniapp里面使用pinia配置。</p>
<ul>
<li>在main.js中引入pinia</li>
</ul>
<div class="cnblogs_code">
<pre>import App from <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./App</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import uView from </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@/uview-plus</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import { createSSRApp } from </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">vue</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import { createPinia } from </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">pinia</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> createApp() {
const app </span>=<span style="color: rgba(0, 0, 0, 1)"> createSSRApp(App)
const pinia </span>=<span style="color: rgba(0, 0, 0, 1)"> createPinia()
app.use(pinia)
app.use(uView)
return {
app,
pinia
}
}</span></pre>
</div>
<ul>
<li>新建一个store/counter.js文件</li>
</ul>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617075535957-1615060360.png"></p>
<div class="cnblogs_code">
<pre>import { defineStore } from 'pinia'<span style="color: rgba(0, 0, 0, 1)">
export const counterStore </span>= defineStore('counter'<span style="color: rgba(0, 0, 0, 1)">, {
state: () </span>=><span style="color: rgba(0, 0, 0, 1)"> ({
count: </span>0<span style="color: rgba(0, 0, 0, 1)">
}),
getters: {},
actions: {
increment() {
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.count++<span style="color: rgba(0, 0, 0, 1)">
}
}
})</span></pre>
</div>
<p>这样基本就引入和创建好了pinia配置文件了,接下来就在.vue页面使用。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>计数:{{counter.count}}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">@click</span><span style="color: rgba(0, 0, 255, 1)">="handleAdd"</span><span style="color: rgba(0, 0, 255, 1)">></span>增加<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">script </span><span style="color: rgba(255, 0, 0, 1)">setup</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
import { counterStore } from </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">@/store/counter</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
const counter </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">=</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> counterStore()
const handleAdd </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">=</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> () </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">=></span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> {
counter.increment()
}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<h3>引入uniapp+vue3组件库uview-plus 和 uni-ui</h3>
<p>目前支持 uniapp vue3 组件库有uni-ui(官方),uview-plus等。</p>
<ul>
<li>使用hbuilderx导入<strong>uni-ui</strong>插件</li>
</ul>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617081400741-1441131976.png"></p>
<p>也可以下载后,直接放在根目录下。</p>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617081538172-2146276696.png"></p>
<p>无需引入、注册即可快速使用。在代码区键入 <span class="cnblogs_code">u</span> ,拉出各种内置或uni-ui的组件列表。</p>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617081809365-1372927505.png"></p>
<p>https://uniapp.dcloud.net.cn/component/uniui/quickstart.html</p>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617082322887-1990146120.png"></p>
<p>https://uiadmin.net/uview-plus/components/install.html</p>
<p>主要讲解下hbuilderx创建项目,导入uview-plus组件库。</p>
<ul>
<li>使用hbuilderx工具导入</li>
</ul>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617082545783-1998216383.png"></p>
<ul>
<li>引入uview-plus及样式</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> main.js</span>
import uviewPlus from '@/uni_modules/uview-plus'<span style="color: rgba(0, 0, 0, 1)">
import { createSSRApp } from </span>'vue'<span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> createApp() {
const app </span>=<span style="color: rgba(0, 0, 0, 1)"> createSSRApp(App)
app.use(uviewPlus)
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
app
}
}</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> uni.scss </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
@import '@/uni_modules/uview-plus/theme.scss';</span></pre>
</div>
<p>需要在app.vue首行引入基础样式</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)"><style lang="scss">
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 注意要写在第一行,同时给style标签加入lang="scss"属性 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
@import "@/uni_modules/uview-plus/index.scss";
</style></span></pre>
</div>
<p>如果 <span style="text-decoration: line-through">不是通过uni_modules方式 </span>导入,而是直接下载在根目录下,则需要额外再配置下easycom引入规则。</p>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617083835498-1684061384.png"></p>
<div class="cnblogs_code">
<pre>import App from <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">./App</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import uView from </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@/uview-plus</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
import { createSSRApp } from </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">vue</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> createApp() {
const app </span>=<span style="color: rgba(0, 0, 0, 1)"> createSSRApp(App)
app.use(uView)
return {
app,
pinia
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在根目录uni.scss中引入主题样式</span>
@import <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@/uview-plus/theme.scss</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在app.vue中引入基础样式</span>
<style lang=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">scss</span><span style="color: rgba(128, 0, 0, 1)">"</span>><span style="color: rgba(0, 0, 0, 1)">
@import </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@/uview-plus/index.scss</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span></style></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> pages.json</span>
<span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">custom</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入uview-plus组件库</span>
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">^u-(.*)</span><span style="color: rgba(128, 0, 0, 1)">"</span>: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">@/uview-plus/components/u-$1/u-$1.vue</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ...</span>
}</pre>
</div>
<h3>uniapp vue3配置vite.config.js</h3>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617084622020-277920034.png"></p>
<p>基于uniapp+vue3项目还可以自定义配置vite.config.js文件。另外还可以自定义.env环境变量。</p>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617084742043-1782762495.png"></p>
<div class="cnblogs_code">
<pre>import { defineConfig, loadEnv } from 'vite'<span style="color: rgba(0, 0, 0, 1)">
import uni from </span>'@dcloudio/vite-plugin-uni'<span style="color: rgba(0, 0, 0, 1)">
import { resolve } from </span>'path'<span style="color: rgba(0, 0, 0, 1)">
import { parseEnv } from </span>'./utils/env'<span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> defineConfig(({ command, mode }) =><span style="color: rgba(0, 0, 0, 1)"> {
const viteEnv </span>=<span style="color: rgba(0, 0, 0, 1)"> loadEnv(mode, __dirname)
const env </span>=<span style="color: rgba(0, 0, 0, 1)"> parseEnv(viteEnv)
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
plugins: [
uni()
],
define: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 自定义配置环境变量</span>
'process.env.VITE_APPNAME': JSON.stringify('uniapp-vite4-vue3'<span style="color: rgba(0, 0, 0, 1)">),
</span>'process.env.VITE_ENV'<span style="color: rgba(0, 0, 0, 1)">: env
},
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">构建选项</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
build: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ...</span>
<span style="color: rgba(0, 0, 0, 1)"> },
esbuild: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 打包去除 console.log 和 debugger</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> drop: env.VITE_DROP_CONSOLE && command === 'build' ? ["console", "debugger"] : []</span>
<span style="color: rgba(0, 0, 0, 1)"> },
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">开发服务器选项</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
server: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 端口</span>
<span style="color: rgba(0, 0, 0, 1)"> port: env.VITE_PORT,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 运行时自动打开浏览器</span>
<span style="color: rgba(0, 0, 0, 1)"> open: env.VITE_OPEN,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 代理配置</span>
<span style="color: rgba(0, 0, 0, 1)"> proxy: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ...</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}
}
})</span></pre>
</div>
<p>这样在.vue页面就可以使用process.env环境变量了。</p>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617085053352-1133443170.png"></p>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617090024549-459695669.png"></p>
<p>以上就是uniapp vue3搭建项目的一些分享,希望对大家有所帮助~ 后续还会分享一些uniapp+vue3实例项目。</p>
<h3><span style="background-color: rgba(204, 255, 204, 1)"><span style="background-color: rgba(204, 255, 204, 1)">flutter3-deepseek流式AI模板|Flutter3.27+Dio+DeepSeeek聊天ai助手</span></span></h3>
<h3><span style="background-color: rgba(255, 255, 0, 1)"><span style="background-color: rgba(255, 255, 0, 1)">Uniapp-DeepSeek跨三端AI助手|uniapp+vue3+deepseek-v3流式ai聊天模板</span></span></h3>
<h3><span style="background-color: rgba(245, 205, 253, 1)"><span style="background-color: rgba(245, 205, 253, 1)">vue3-webseek网页版AI问答|Vite6+DeepSeek+Arco流式ai聊天打字效果</span></span></h3>
<h3><span style="background-color: rgba(204, 255, 255, 1)"><span style="background-color: rgba(204, 255, 255, 1)">Electron35-DeepSeek桌面端AI系统|vue3.5+electron+arco客户端ai模板</span></span></h3>
<p><strong>往期uniapp+vue3实战项目</strong></p>
<blockquote>
<p><span style="font-size: 12px">uniapp+vue3酒店预订|vite5+uniapp预约订房系统模板(h5+小程序+App端)</span></p>
<p><span style="font-size: 12px">uniapp-vue3-oadmin手机后台实例|vite5.x+uniapp多端仿ios管理系统</span></p>
<p><span style="font-size: 12px">uniapp+vue3聊天室|uni-app+vite4+uv-ui跨端仿微信app聊天语音/朋友圈</span></p>
<p><span style="font-size: 12px">uniapp-welive仿微信/抖音直播带货|uni-app+vue3+pinia短视频直播商城</span></p>
</blockquote>
<p><img src="https://img2023.cnblogs.com/blog/1289798/202306/1289798-20230617085502114-1389365541.gif"></p>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
本文为博主原创文章,未经博主允许不得转载,欢迎大家一起交流 QQ(282310962) wx(xy190310)<br><br>
来源:https://www.cnblogs.com/xiaoyan2017/p/17487018.html
頁:
[1]