- 在VisualStudio中部署GDAL库的C++版本(包括SQLite、PROJ等依赖)
- Android开机流程介绍
- STM32CubeMX教程31USB_DEVICE-HID外设_模拟键盘或鼠标
- 深入浅出Java多线程(五):线程间通信
项目代码以上传至码云,项目地址:gitee.com/breezefaith… 。
近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台系统,开发者基于此项目进行裁剪和扩展来完成自己的功能开发。但前台系统花样繁多,可能是PC端浏览器,可能是微信网页,微信小程序,安卓,鸿蒙……因此笔者只能从个人的开发需求出发,搭建了原生vue3版、原生微信小程序版、原生React版和uniapp版的前台系统模板.
创建uniapp项目可以使用官方提供的IDE工具HBuilderX可视化的创建,但项目结构与普通的vue项目有所不同;而使用命令行方式创建的项目,是传统的node项目结构。工程代码在src目录下,编译器在项目下,编译结果在dist目录下。这样的项目结构更符合笔者的开发习惯.
本文内容主要就是来介绍使用命令行方式搭建uniapp版的前台系统模板工程的完整过程.
uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台.
uniapp官方文档:uniapp.dcloud.net.cn/ 。
Vue 3 是一个流行的开源JavaScript框架,用于构建用户界面和单页面应用。Vue 3与Vue 2的主要区别包括:
Vue3官方文档:cn.vuejs.org/ 。
TypeScript是由 Microsoft 开发并维护的开源编程语言,它是在 JavaScript的基础上增加了静态类型、类和接口等特性,从而将其提升为一个功能更为丰富的开发平台。TypeScript 通过编译器将 TypeScript 代码转换为 JavaScript 代码,确保这些代码能够在支持 JavaScript 的各种设备和平台上运行。这种设计允许开发者利用 TypeScript 的静态类型检查以及类、接口和其他 OOP 功能来构建大型、复杂的 Web 应用,同时享受 JavaScript 本身的高灵活性和易于使用的特点.
Typescript官网文档:www.typescriptlang.org/ 。
Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。 如果您熟悉 Composition API,您可能会认为您已经可以通过一个简单的 export const state = reactive({}). 这对于单页应用程序来说是正确的,但如果它是服务器端呈现的,会使您的应用程序暴露于安全漏洞。 但即使在小型单页应用程序中,您也可以从使用 Pinia 中获得很多好处:
Pinia 目前也已经是 vue 官方正式的状态库。适用于 vue2 和 vue3。可以简单的理解成 Pinia 就是 Vuex5。也就是说, Vue3 项目,建议使用Pinia.
Pinia官方文档:pinia.web3doc.top/ 。
Tailwind是一个原子类方式命名的CSS工具集。Tailwind CSS 是一个功能类优先的 CSS 框架,它集成了诸如 flex, pt-4, text-center 和 rotate-90 这样的的类,它们能直接在脚本标记语言中组合起来,构建出任何设计。它将所有的css属性全部封装成语义化的类,比如你想要一个float:left,它已经帮你封装好了,你直接使用一个float-left就可以。需要一个宽度为12像素,只需要写w-3就可以.
使用tailwindcss极大的减少代码量,能轻松完成响应式设计,不需要再写单独的css,也不需要再为class取个什么名字而苦恼.
tailwindcss官方文档:tailwindcss.com/ 。
说到uv-ui,就不得不先从uni-ui和uView说起。uni-ui、uView和uv-ui都是uni-app生态下专用的组件库.
uni-ui 是DCloud官方提供的跨端ui库,它是基于vue组件的、flex布局的、无dom的跨全端ui框架.
但此组件库组件相对较少,设计风格略显滞后,笔者本人并不是很喜欢.
uni-ui官方文档:uniapp.dcloud.net.cn/component/u… 。
uView从2018年初发布以来,是uni-app生态最优秀的UI框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水。uView2.0,全面兼容了uni-app生态下的nvue开发模式,对1.x进行了架构重构,细节和性能都有极大提升.
但uView是基于vue2实现,在vue3框架下使用会存在诸多问题.
uView官方文档:uviewui.com/ 。
uv-ui是兼容vue3+2、nvue、app、h5、多端小程序的uni-app生态框架,大部分组件基于uView2.x,在经过改进后全面支持vue3,部分组件做了进一步的优化,支持单独导入,方便开发者选择导入需要的组件.
uv-ui官方文档:www.uvui.cn/ 。
结合本项目的实际情况,笔者最终选择uv-ui作为项目的ui库.
Vite是Vue的作者尤雨溪开发的Web开发构建工具,它是一个基于浏览器原生ES模块导入的开发服务器,在开发环境下,利用浏览器去解析import,在服务器端按需编译返回,完全跳过了打包这个概念,服务器随启随用。同时不仅对Vue文件提供了支持,还支持热更新,而且热更新的速度不会随着模块增多而变慢。Vue3默认使用Vite作为项目脚手架工具.
Vite官方文档:vitejs.cn/ 。
Vite需要 Node.js 版本 14.18+,16或更高版本.
Tailwind CSS 需要 Node.js 12.13.0 或更高版本.
可使用 node -v命令查看当前node版本,如果不符合要求请先升级Nodejs.
npx degit dcloudio/uni-preset-vue#vite-ts uniapp-vue3-ts-scaffold
项目创建成功后执行以下命令安装npm依赖.
npm install --registry=https://registry.npmmirror.com
或
yarn install
或
pnpm install
依赖安装完成后,执行以下命令可运行代码.
npm run dev:h5
或
npm run dev:mp-weixin
项目创建过程中遇到问题可参考官方文档uniapp.dcloud.net.cn/quickstart-… 。
npm install --registry=https://registry.npmmirror.com pinia@2.0.33
或
yarn add pinia@2.0.33
或
pnpm install pinia@2.0.33
将src/main.ts修改为以下内容:
import { createSSRApp } from "vue";
import App from "./App.vue";
import * as Pinia from 'pinia';
export function createApp() { const app = createSSRApp(App); app.use(Pinia.createPinia()),
return { app, Pinia, // 此处必须将 Pinia 返回 }; } 。
// stores/counter.ts
import { defineStore } from 'pinia';
export const useCounterStore = defineStore('counter', { state: () => { return { count: 0 }; }, // 也可以这样定义 // state: () => ({ count: 0 }) actions: { increment() { this.count++; }, }, }),
以下代码template中使用的view、image、text元素是uniapp内置元素,因为uniapp要兼容浏览器、小程序和app等多种环境,不建议在uniapp中直接使用浏览器所支持的div、span等元素,也不建议在uniapp项目中使用window、document、navigator等只有浏览器支持的API.
<template>
<view>
<!-- 直接从 store 中访问 state -->
<text>Current Count: {{ counter.count }}</text>
</view>
</template>
<script setup lang="ts"> import { ref } from 'vue' import { useCounterStore } from '@/stores/counter' 。
const counter = useCounterStore(); counter.count++ // 自动补全! counter.$patch({ count: counter.count + 1 }) // 或使用 action 代替 counter.increment() </script> 。
<style> </style> 。
Tailwind CSS 需要 Node.js 12.13.0 或更高版本。对于大多数实际项目,建议将 Tailwind 作为 PostCSS 插件安装,本文使用的也是该方式.
执行以下命令安装依赖:
npm install --registry=https://registry.npmmirror.com --save-dev @uni-helper/vite-plugin-uni-tailwind autoprefixer postcss postcss-comment postcss-html postcss-import postcss-scss sass sass-loader tailwindcss
或
yarn add --save-dev @uni-helper/vite-plugin-uni-tailwind autoprefixer postcss postcss-comment postcss-html postcss-import postcss-scss sass sass-loader tailwindcss
或
pnpm install --save-dev @uni-helper/vite-plugin-uni-tailwind autoprefixer postcss postcss-comment postcss-html postcss-import postcss-scss sass sass-loader tailwindcss
使用命令行可以自动创建postcss.config.js和tailwind.config.js配置文件,也可以手动创建.
npx tailwindcss init -p
/** @type {import('tailwindcss').Config} */
module.exports = { darkMode: "class", content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"], // 兼容小程序,将 : 替换成 separator: '', theme: { // 兼容小程序,将默认配置里带 .和/ 清除 }, variants: {}, plugins: [], corePlugins: { // 兼容小程序,将带有 * 选择器的插件禁用 preflight: false, space: false, divideColor: false, divideOpacity: false, divideStyle: false, divideWidth: false } },
在postcss配置中主动添加tailwindcss配置文件.
const path = require("path");
const comment = require("postcss-comment");
const tailwindcss = require("tailwindcss");
const autoprefixer = require("autoprefixer");
const postcssImport = require("postcss-import");
module.exports = { parser: comment, plugins: [ postcssImport({ resolve(id, basedir, importOptions) { if (id.startsWith("~@/")) { return path.resolve(process.env.UNI_INPUT_DIR, id.substr(3)); } else if (id.startsWith("@/")) { return path.resolve(process.env.UNI_INPUT_DIR, id.substr(2)); } else if (id.startsWith("/") && !id.startsWith("//")) { return path.resolve(process.env.UNI_INPUT_DIR, id.substr(1)); } return id; }, }), tailwindcss({ config: "./tailwind.config.js", }), autoprefixer({ remove: true, }), ], },
在vite配置中主动添加potcss配置文件.
import { defineConfig } from "vite";
import postcssConfig from './postcss.config'
import uni from "@dcloudio/vite-plugin-uni";
import uvtw from '@uni-helper/vite-plugin-uni-tailwind'
// https://vitejs.dev/config/ export default defineConfig({ css: { postcss: postcssConfig, }, plugins: [ uni(), uvtw(), ], }),
在src目录下创建styles目录,在styles目录下创建tailwind.css.
tailwind.css文件内容如下:
@tailwind base;
@tailwind components;
@tailwind utilities;
配置完成后需要引入tailwindcss,注意不要在main.ts中引入,这会导致APP端不生效,需要在App.vue中引入,这一点上与原生Vue有所区别。 修改src/App.vue内容如下:
<script setup lang="ts"> import { onLaunch, onShow, onHide } from "@dcloudio/uni-app"; onLaunch(() => { console.log("App Launch"); }); onShow(() => { console.log("App Show"); }); onHide(() => { console.log("App Hide"); }); </script>
<style> @import url('styles/tailwind.css'); </style>
<template>
<view class="w-full h-[100px] bg-red flex justify-center items-center">
<text>Hello Tailwind CSS</text>
</view>
</template>
以上代码定义了一个宽度100%,高度100px,背景是红色,使用flex布局,垂直方向和水平方向内容都居中的区域,区域中有一个文本元素,显示Hello Tailwind CSS.
uv-ui官方推荐使用HbuilderX 方式进行安装.
插件市场下载入口:ext.dcloud.net.cn/plugin?name… 。
使用 Hbuilder X 开发的用户,可以在 uni-app 插件市场通过 uni_modules 的形式进行安装,此安装方式可以方便后续在 uni_modules 对 uv-ui 进行一键升级,右键uni_modules目录或右键某组件,均可进行一键升级.
在uni-app插件市场右上角选择 下载插件并导入HBuilderX,导入到对应的项目中即可.
使用该方式需要注册并登录Hbuilder X。下载安装uv-ui还需要观看广告,如果介意可使用其他方式安装.
安装成功后会在src目录下生成一个uni_modules目录,目录下内容都是uv-ui的组件,可以在代码中直接使用.
<template>
<view>
<uv-button type="primary" text="uv-ui按钮"></uv-button>
</view>
</template>
以上代码就是在view中添加了一个uv-ui组件库的按钮.
在本文中介绍了基于命令行方式搭建一个uniapp工程脚手架的完整过程,希望本文能对您有所帮助.
项目代码以上传至码云,项目地址:gitee.com/breezefaith… 。
最后此篇关于使用命令行方式搭建uni-app+Vue3+Typescript+Pinia+Vite+TailwindCSS+uv-ui开发脚手架的文章就讲到这里了,如果你想了解更多关于使用命令行方式搭建uni-app+Vue3+Typescript+Pinia+Vite+TailwindCSS+uv-ui开发脚手架的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,现在所在公司项目有抖音、快手、微信、支付、APP端
老是碰到初版制作完成没多久,就整一出说什么要更改整个项目的色彩体系。真的是宝宝心里苦啊. 起初都是通过uni项目自带的uni.scss中定义,在替换页面上对应的css。以便于达到一次性修改整体布局的
小程序录制视频;10-30秒;需要拍摄人脸,大声朗读数字(123456)这种。 1.camera组件 camera页面内嵌的区域相机组件。注意这不是点击后全屏打开的相机 camera只支持小程序
小程序录制视频;10-30秒;需要拍摄人脸,大声朗读数字(123456)这种。 1.camera组件 camera页面内嵌的区域相机组件。注意这不是点击后全屏打开的相机 camera只支持小程序
在实践运用中,经常需要在路由跳转时判断是否需要登录权限,页面跳转时,添加加在if判断。 插件市场也有一些这种插件,配置也稍微复制,大部分朝向vue-router。 注:本次路由封装,只是单纯的判断是否
已经用 uni-app+vue3+ts 开发了一段时间,记录一下日常遇见的问题和解决办法 。 uni-app 中的单端代码 uni-app 是支持多端,如果你想让你的代码,只在部分平台使
微信小程序的订阅消息是小程序的重要能力之一,为实现服务的闭环提供更优的体验。订阅消息我们应该经常见到,比如下单成功之后的 服务通知 ,支付成功后的 支付成功通知 ,都属于小程序的订阅消息。
这是我目前发现较好的uni-app 自定义底部导航栏方法,其他方法的缺点主要是在切换时,要么会闪烁,要么会每点击一下,都会请求一次数据。如果有其他更好的方法,欢迎评论留言,最近才开始用uni-app
一、前言 应用uni-app跨端框架开发APP过程中,遇到以下新增需求: 应用在闪崩或异常退出时,用户希望正在填写的大量信息可以得以保存。当用户再次打开APP时,之前未提交的信息可回显。 刚开始会考虑
一、资源下载 APP应用开发过程中,资源下载是一种常见应用场景。uni-app中应用uni.downloadFile实现文件下载功能。示例代码如下: downLoadFile() { cons
一、问题描述 Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage We noticed that your app requ
一、资源下载 APP应用开发过程中,资源下载是一种常见应用场景。uni-app中应用uni.downloadFile实现文件下载功能。示例代码如下: downLoadFile() { cons
一、问题描述 Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage We noticed that your app requ
到目前为止,我已经在 Quarkus 中使用 smallrye Mutiny 完成了非常基本的工作。基本上,我有一个或两个非常小的网络服务,它们只与网络应用程序交互。这些服务返回 Uni . 现在我正
到目前为止,我已经在 Quarkus 中使用 smallrye Mutiny 完成了非常基本的工作。基本上,我有一个或两个非常小的网络服务,它们只与网络应用程序交互。这些服务返回 Uni . 现在我正
我正在开发一个使用 C++ 库的 java 应用程序。我的应用程序类型是客户端/服务器 RCP(基于 eclipse 插件)。问题是当我尝试将 2 个以上客户端连接到我的服务器时,它总是卡住。奇怪的是
来自The Java® Language Specification:的声明 An exception parameter of a uni-catch clause is never implici
在嵌入式系统中,由于各种合理的原因,趋势仍然没有完全转向多核处理器。 因此,了解单处理器系统使用各种机制和多线程功能的同步行为仍然很重要。此外,每当我接受采访时,他们都会问我有关特定 C 程序在 un
我编写了一个函数,目的是为字符串中的每个字母填充一个带有 uni 代码字符的数组。 但是我返回的结果是一个空值数组。 function rot13(str) { var splitString =
我在尝试在 .sql 数据库中获取数据源时遇到了 mySQL 问题。我正在运行 Ubuntu 15.10 并通过终端使用 mySQL。这是我获取数据库的过程: mysql -u root - p 输入
我是一名优秀的程序员,十分优秀!