uni-app项目从0-1基础架构搭建全流程
前情
最近新接了一个全新项目,我负责从0开始搭建小程序,我选用的技术栈是uni-app技术栈,UI库选择的是uview-plus,CSS引入现在流行的tainlwindcss,实现CSS原子化书写,实现小程序分包,分包中实现webview使用和彩蛋页(方便开发和测试使用的功能页),同时实现接口请求、本地缓存等常用工具方法的封装
项目搭建
tailwindcss原子化CSS框架引入
对于uni-app项目官方有自带的IDE,以往新项目我都是通过IDE新建空白项目,再一点点增加自己的东西这样做的。
但这一次我就踩到了第一个小坑,我一开始是建的空白项目,在引入tainlwindcss的时候,发现按文挡一步步操作下来,最后一直报错,折腾了好一会没解决,我都已经为前面我接手的二个历史项目都成功引入了,但这一次就是没法搞成功,好在因项目是刚刚开始,没有历史负担,也不想浪费太多时间折腾了,最后是直接用的已经引入了tailwindcss的项目模板开始的。
tailwindcss引入方案选用的是weapp-tailwindcss,官网:https://tw.icebreaker.top
使用的项目基础模板仓库:https://github.com/icebreaker-template/uni-app-vue3-tailwind-hbuilder-template
uview-plus的ui库引入
官方文挡有提供几种方式在自己项目中引入,我这里使用的Hbuilder X的方式,文挡地址:https://uiadmin.net/uview-plus/components/install.html
点击下载地址去unicloud插件市场下载安装插件即可,安装好插件后,按官方文挡:下载安装方式配置 | uview-plus - 全面兼容nvue/鸿蒙/uni-app-x的uni-app生态框架 - uni-app UI框架 一步一步配置即可,至此UI组件已成功引入
uview-plus我在很多个项目中都有使用,组件挺丰富,但是BUG也有遇到一些,自己改改源码问题不大,最让人恼火的就是每天看文挡都要强制你看一条视频广告,其实页面中放广告,这真的不是问题,这是开源作者的自救,我是支持的,但是强制观看广告才能查文挡有点吃相不是特别好,但这是人家的开源项目,你也不能说什么,如果你很介意那强制的广告官方好像有办会员免广告,或者你可以使用uvui库:我的资料管理-uv-ui 是全面兼容vue3+2、nvue、app、h5、小程序等多端的uni-app生态框架,也是个不错选择,他们的组件API大差不大,我接手过一个老项目里面就用了很多的uvui的组件,我都是改下组件名无缝切换了,当然对于前端开发的我们,uview-plus那小小拦截弹框也难不倒我们,再加之我先接触的是uview-plus,我此项目使用的就是它了
分包实现
对于绝大多数公司的小程序项目,分包是必须要做的,就是不为性能考虑,小程序单包2M的限制,对于公司项目动不动就上百个页面的,不分包是不太可能的,所以我一开始搭基础架构的时候就做好分包
小程序分包是非常简单的,就一个配置一个目录就搞定的事,一个配置就是在pages.json中申明分包名称和当前分包的路由,目录就是分包的本地目录
{
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页",
"navigationBarTextStyle": "white",
"navigationBarBackgroundColor": "#191320",
"disableScroll": true,
"enablePullDownRefresh": false,
"navigationStyle": "custom",
// #ifdef MP-ALIPAY
"transparentTitle": "always",
"titlePenetrate": "YES",
"allowsBounceVertical": "NO"
// #endif
}
},
...
],
// 分包配置
"subPackages": [
{
"root": "other",
"pages": [
{
"path" : "egg/egg",
"style" :
{
"navigationBarTitleText" : "彩蛋页"
}
},
{
"path" : "webview/webview",
"style" :
{
"navigationBarTitleText" : ""
}
},
...
],
...
}
你想把放到子包的页面放到对应子包目录中即完成了分包,这里分了一个other分包,基础架构提供彩蛋页和webview页面
彩蛋页主要用于方便测试,提供了当前小程序所处环境展示,手动切换小程序环境,还有本地缓存管理,这个你可以在开发版中在页面的某一个不显眼的地点放一个入口,我的做法是连续点击底部logo 6次进入彩蛋页,彩蛋页可以根据你项目要求自己实现添加一些方便测试的功能。
webview页面主要是用于小程序中展示H5页面,像隐私协议等一些不是特别重要,但又不得不有的H5页面,通过link传一个链接过去,就可以展示H5页面
通用工具方法
对于前端项目,接口请求,本地缓存操作是基本不会缺少的功能需求,于是引入我自己已经封装好且已经发布在插件市场的一个插件:常用工具方法 - DCloud 插件市场,该插件基于uni.request封装了接口请求,支持请求和响应的拦截,同时地封装本地存储方法,支持设置过期时间,本地存储提供了二个,你可以选择使用,同时提供了小程序获取元素信息(宽高位置等)的方法,对于一些常用的正则也提供了方法,具体使用可以查看文挡,或者查看源码使用,都不复杂,使用中遇到问题可以留言,我会不时观看用户留言的
基础架构模板目录结构
经过上面一些折腾最终生成的项目目录结构如下:
项目根目录
├── .editorconfig // 编辑器配置文件
├── .gitignore // Git忽略文件
├── App.vue // 应用入口组件
├── index.html // HTML入口文件
├── main.js // 主入口文件
├── manifest.json // uni-app配置文件
├── package.json // 项目配置文件
├── pages.json // 页面路由配置
├── postcss.config.cjs // PostCSS配置
├── README.md // 项目说明文档
├── shared.js // 公用配置
├── tailwind.config.js // Tailwind CSS配置
├── uni.scss // uniapp全局样式
├── vite.config.js // Vite配置文件
│
├── api/ // API接口目录
│ └── login.js
│
├── components/ // 组件目录
│
├── config/ // 配置目录
│ └── http.js // HTTP请求配置
│
├── other/ // other子包
│ ├── egg/
│ │ └── egg.vue
│ └── webview/
│ └── webview.vue
│
├── pages/ // 页面目录
│ ├── example_tailwindcss/
│ │ └── index.vue
│ └── index/
│ └── index.vue
│
├── static/ // 静态资源目录,放弃项目图片等静态资源
│ └── .gitkeep
│
├── uni_modules/ // uni-app模块目录
│ ├── hbxw-utils/ // hbxw-utils工具包
│ │ ├── changelog.md
│ │ ├── package.json
│ │ ├── readme.md
│ │ └── js_sdk/
│ └── uview-plus/ // uView Plus组件库
│ ├── changelog.md
│ ├── index.js
│ └── ...
│
└── utils/ // 工具函数目录
├── request.js // 请求工具
└── share.js // 微信分享方法
基本项目架构模板分享
代码仓库
其实有机会参与一个项目从0-1是很幸运的,很多时间大多数都是接手前辈们留下的珍贵历史代码,久久在其中出不来,当然这也是常态,我也接手过不少的这种历史项目,其实还好吧,在公司没有下决心重构代码的时候,记住一点就好,前辈的代码能跑就就不要去动它,开发功能也是基于扩展,除非是非动不可,有点说跑题,这一次正好有一个从0到1的项目,在进入开发的时候我就发现有必要整理出一套模板,后续新项目的基础架构可以一步到位,我于是趁这个机会搭建了这一套基础架构模板,欢迎大家clone使用,仓库地址:xiewu/uniapp-vue3-tailwindcss-uview-plus
模板生成器cli
直接clone使用体验,而且代码仓库没有放github,你也不用老担心没法访问的问题,体验也是非常棒的,如果你觉得clone不合自己味口,可以使用我写好的模板生成器cli:@xwy-cli/cli - npm,它可以一键生成这个项目模板,同时还支持生成一些其它开发中常用的文件模板,如.gitignore,editconfig等,后续会有别的模板我也会持续更新添加,欢迎关注使用,如果你有需要添加的模板,我也可以帮忙添加的,当然前提是要通用的,而不是个人定制的,如果你有这种个人定制的需求,可以留言或者私信我,我推荐个软件给你,也是我经常用的用于保存自己的代码段和模板的工具
最后闲聊
模板只提供了基本的项目架构,可能并不一定满足你的需求,或者你clone下来项目报错了,使用不了,就说开源垃圾代码,我在DCloud插件市场分享了不少组件,有好几个开发者即不说明报什么错,也不说遇到什么问题,直接一星差评又说垃圾代码不要分享出来,我又无法跟踪问题在哪里,这感觉就没有必要啦,使用不了有可能跟你node版本或者别的环境问题有关,你可以尝试解决,通过搜索引擎搜索对应错误提示,加之现在又AI胜行,报什么错可以尝试丢给AI,让它帮你瞧瞧,也许就好了,实在解决不了可以留言或者换一个,东边不亮西边亮
uni-app项目从0-1基础架构搭建全流程的更多相关文章
- APP自动化1——Appium+pycharm自动化环境搭建全流程
1. 安装python3,pycharm,可参考之前写的文档:https://www.cnblogs.com/chenweitoag/p/13154815.html 2. 准备以下必要工具: 基于wi ...
- 用c#开发微信 (11) 微统计 - 阅读分享统计系统 1 基础架构搭建
微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读.分享 ...
- MySQL:基础架构和工作流程
[参考文章]:01|基础架构:一条查询语句的执行流程 1. 基本架构 大体来说,MySQL可以分为Server层和存储引擎两部分. Server层包括链接器,分析器,优化器,执行器等,涵盖大多数核心服 ...
- 用c#开发微信 (6) 微渠道 - 推广渠道管理系统 1 基础架构搭建
我们可以使用微信的“生成带参数二维码接口”和 “用户管理接口”,来实现生成能标识不同推广渠道的二维码,记录分配给不同推广渠道二维码被扫描的信息.这样就可以统计和分析不同推广渠道的推广效果. 本系统使用 ...
- spring boot2.0(一 ) 基础环境搭建
1.基础配置 开发环境:window jdk版本:1.8(spring boot2.0最低要求1.8) 开发工具:eclipse 构建方式:maven3 2.POM配置文件 <project x ...
- 零开始:NetCore项目权限管理系统:基础框架搭建
有兴趣的同学可以一起做 喜欢NetCore的朋友,欢迎加群QQ:86594082 源码地址:https://github.com/feiyit/SoaProJect 新建一个空的解决方案,建立对应的解 ...
- .NET Core + Ocelot + IdentityServer4 + Consul 基础架构实现
先决条件 关于 Ocelot 针对使用 .NET 开发微服务架构或者面向服务架构提供一个统一访问系统的组件. 参考 本文将使用 Ocelot 构建统一入口的 Gateway. 关于 IdentityS ...
- 【转】.NET Core + Ocelot + IdentityServer4 + Consul 基础架构实现
作者:Zhang_Xiang 原文地址:.NET Core + Ocelot + IdentityServer4 + Consul 基础架构实现 先决条件 关于 Ocelot 针对使用 .NET 开发 ...
- 项目vue2.0仿外卖APP(一)
最近用vue.js做一个仿饿了么外卖APP的项目,现在也把流程啊什么的暂时先整理一下在这个博客上面. 当然,这个过程会有点长,不过确实能学到很多东西. 话不多说,马上开始吧. 1.项目介绍 选用当前最 ...
- b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释
继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更新页面显示状态这种方式在运作的,从若干年前简单的ajax流行起来 ...
随机推荐
- NCS开发学习笔记-基础篇-前言
nRF5 SDK 与 nRF Connect SDK 目前Nordic有2套并存的SDK:老的nRF5 SDK和新的nRF Connect SDK(简称NCS),两套SDK相互独立. nRF5 SDK ...
- 『Python底层原理』--GIL对多线程的影响
在 Python 多线程编程中,全局解释器锁(Global Interpreter Lock,简称 GIL)是一个绕不开的话题. GIL是CPython解释器的一个机制,它限制了同一时刻只有一个线程可 ...
- ModuleNotFoundError: No module named '_bz2'
前言 运行 python 报错:ModuleNotFoundError: No module named '_bz2' when building python 解决 安装在 Ubuntu/Debia ...
- php使用redis锁
redis加锁分类 redis能用的的加锁命令分别是INCR.SETNX.SET 利用predis操作redis方法大全 第一种锁命令INCR 这种加锁的思路是, 当 key 不存在,那么 key 的 ...
- mysql 2003远程访问失败 mysql8配置远程访问
# mysql -uroot -p #进入数据库 > use mysql;#进入数据库 > select host, user, authentication_string, plugin ...
- halcon 入门教程(二)Blob分析(二值化,联通区域,分割区域,提取区域)保姆级教程
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/18781187 有兴趣可以多看其他的halcon教程 halcon 学习教程目录 OK,今天讲h ...
- 容器到底是个啥?(附Docker学习资源汇总)
目录Docker与容器 初识容器与Docker 为什么要使用Docker Docker优势简介Docker核心概念 Docker客户端和服务器 Docker镜像 D ...
- docker常见问题修复方法
一.运行容器报错:Error response from daemon: Error running DeviceCreate (createSnapDevice) dm_task_run faile ...
- Tomcat之Jconsole监控
JConsole的图形用户界面是一个符合Java管理扩展(JMX)规范的监测工具,JConsole使用Java虚拟机(Java VM),提供在Java平台上运行的应用程序的性能和资源消耗的信息.在Ja ...
- 面试题-Java虚拟机
前言 Java虚拟机部分的题目,是我根据Java Guide的面试突击版本V3.0再整理出来的,其中,我选择了一些比较重要的问题,并重新做出相应回答,并添加了一些比较重要的问题,希望对大家起到一定的帮 ...