uniapp+vue3搭建项目

工具使用:

  • Pinia
    Vue 3 官方推荐的状态管理库,比 Vuex 更轻量,支持模块化,结合 persistedstate 插件可以持久化存储数据。
  • uView-plus
    专为 UniApp 设计,支持 App、小程序、H5。
  • UnoCSS
    更轻量,比 TailwindCSS 性能更好,适合 UniApp。
  • API 请求(luch-request)

一、创建uniapp项目

注意:

  • Vue3/Vite版要求 node 版本 18+、20+
  • 如命令行创建失败,请直接访问 gitee 下载模板

更多的注意安装流程和注意事项可以参考官网:uni-app官网

通过 vue-cli脚手架 创建 uni-app 项目

npx degit dcloudio/uni-preset-vue#vite-ts uni-vite-vant

二、编译和运行

1. 安装依赖 yarn install

2. 运行项目 yarn run dev:h5 

三、配置pinia并实现持久化

Pinia官方文档:Pinia | The intuitive store for Vue.js

Persistedstate插件文档:Pinia Plugin Persistedstate

1、 安装pinia和持久化插件        

使用 CLI搭建的项目安装pinia需要注意

4.14 之前:执行 yarn add pinia@2.0.36 或 npm install pinia@2.0.36 安装,要固定版本

4.14 之后:执行 yarn add pinia 或 npm install pinia 安装,可不指定版本

# 我们这里执行
yarn add pinia@2.0.36
# 或者使用 npm
npm install pinia@2.0.36

安装持久化插件pinia-plugin-persistedstate

npm i pinia-plugin-persistedstateyarn add pinia-plugin-persistedstate

2、封装pinia

为减少main.ts代码冗余,这里进行封装pinia创建和持久化


(1)创建index.ts文件(路径src/stores/index.ts)

(2)完成初始化

// src/store/indeximport { createPinia } from "pinia" //引入piniaconst pinia = createPinia() //创建pinia实例export default pinia //导出pinia用于main.js注册

(3)引入并初始化pinia

//main.jsimport { createSSRApp } from 'vue';
import pinia from '@/stores'; //引入
import App from './App.vue';
export function createApp() {const app = createSSRApp(App);app.use(pinia); //将 Pinia 挂载到全局实例return {app,};
}

(4)定义store
创建store文件夹用于存放,新建user文件

persist选项设置为 true时则整个整个 store 现在将使用 默认的持久性设置进行保存。

import { defineStore } from 'pinia';// 你可以任意命名 `defineStore()` 的返回值,但最好使用 store 的名字,同时以 `use` 开头且以 `Store` 结尾。
// (比如 `useUserStore`,`useCartStore`,`useProductStore`)
// 第一个参数是你的应用中 Store 的唯一 ID。
export const useUserStore = defineStore('user', {state: () => ({count: 0,name: 'Eduardo',}),getters: {doubleCount: (state) => state.count * 2,},actions: {increment() {this.count++;},},//   persist: true,
});

四、安装uview-plus

# 安装sass
yarn add sass@1.56.0 -D
# 或
npm i sass@1.56.0 -D# 安装sass-loader,注意需要版本10,否则可能会导致vue与sass的兼容问题而报错
yarn add sass-loader@10 -D
# 或
npm i sass-loader@10 -D# 安装uview
yarn add uview-plus
//
npm i uview-plus# dayjs
yarn add dayjs
……# clipboard
yarn add clipboard
……

在项目src目录中的main.js中,引入并使用uview-plus的JS库

import { createSSRApp } from 'vue';
import pinia from '@/stores'; //引入
import App from './App.vue';
import uviewPlus from 'uview-plus';export function createApp() {const app = createSSRApp(App);app.use(pinia); //将 Pinia 挂载到全局实例app.use(uviewPlus);return {app,};
}

# 引入uview-plus的全局SCSS主题文件

在项目根目录的uni.scss中引入此文件。

/* uni.scss */
@import 'uview-plus/theme.scss';

 # 引入uview-plus基础样式

App.vue首行的位置引入,注意给style标签加入lang="scss"属性

<style lang="scss">/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */@import "uview-plus/index.scss";
</style>

# 配置easycom组件模式 

此配置需要在项目src目录的pages.json中进行。

// pages.json
{"easycom": {"autoscan": true,// 注意一定要放在custom里,否则无效,https://ask.dcloud.net.cn/question/131175"custom": {"^u--(.*)": "uview-plus/components/u-$1/u-$1.vue","^up-(.*)": "uview-plus/components/u-$1/u-$1.vue","^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue"}},// 此为本身已有的内容"pages": [// ......]
}

 注:在配置完后,可以发现在mian.ts中引入uview-plus时会提示ts报错:无法找到模块“uview-plus”的声明文件。

可以在src文件中创建一个types文件夹专门用来存放ts类型声明文件,在文件中新建uview.d.ts文件写入下方声明代码即可:

declare module "uview-plus"

五、安装UnoCSS

这里可以在vscode应用市场中搜索Unocss

yarn add -D unocss# 或者npm
npm install -D unocss

配置vite.config.ts

import { defineConfig } from 'vite';
import uni from '@dcloudio/vite-plugin-uni';// https://vitejs.dev/config/
export default defineConfig(async () => {/*** 为兼容 @dcloudio/vite-plugin-uni 采用 CJS ,而 UnoCSS 只支持 ESM* @see https://github.com/dcloudio/uni-app/issues/4815*/const Unocss = await import('unocss/vite').then((i) => i.default);return {plugins: [uni(), Unocss()],};
});

 创建UnoCSS配置文件

// uno.config.tsimport { defineConfig } from 'unocss'export default defineConfig({// ...UnoCSS options
})

 六、luch-request请求封装

// 安装// yarn
yarn add luch-request// npm
npm install luch-request

在src目录下创建api/request.ts分装请求

import Request from 'luch-request';const http = new Request({baseURL: '', //设置请求的base urltimeout: 30000, //超时时长30秒,header: {'Content-Type': 'multipart/form-data;application/json;charset=UTF-8;',},
});//请求拦截器
http.interceptors.request.use((config) => {// 可使用async await 做异步操作const token = uni.getStorageSync('token');if (token) {// config.header.common['Authorization'] = 'Bearer ' + token;}if (config.method === 'POST') {config.data = JSON.stringify(config.data) as unknown as Record<string,any>;}return config;},(error) => {return Promise.resolve(error);}
);// 响应拦截器
http.interceptors.response.use((response) => {console.log(response);return formatData(response.data);},(error) => {//未登录时清空缓存跳转if (error.statusCode == 401) {uni.clearStorageSync();uni.switchTab({url: '/pages/index/index.vue',});}const { errMsg } = error;console.log(errMsg, '我才是error');uni.showToast({title: errMsg,duration: 2000,});return Promise.resolve(error);}
);function formatData(data: any) {switch (Number(data.code)) {case 200:return Promise.resolve(data);//   ....執行其他報錯代碼default:return Promise.reject(data);}
}
export default http;

创建 api/index.ts (根据自己项目自定义文件名)

import request from './request';export function customApi(data: Record<string, any>) {// get请求 可以拼接url或者传入数据对象 二选一return request.get('/list', { params: data });
}export function toLogin(data: any) {return request.post('/auth/login', data);
}
// 页面使用import { customApi } from '@/api';customApi({})

七、其他配置

(1)插件和组件自动导入

// 安装
yarn add -D unplugin-vue-components unplugin-auto-importnpm install -D unplugin-vue-components unplugin-auto-import

vite.config.ts 中进行如下配置:

import { defineConfig } from 'vite';
import uni from '@dcloudio/vite-plugin-uni';
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';export default defineConfig(async () => {……return {plugins: [AutoImport({imports: ['vue', 'uni-app', 'vue-router'],dts: true,vueTemplate: true,}),/*** unplugin-vue-components 按需引入组件* 注意:需注册至 uni 之前,否则不会生效*/Components({dirs: ['src/components'], // 自动导入的目录extensions: ['vue'],}),……],};
});
插件作用
unplugin-vue-components自动导入 Vue 组件,无需手动 import
unplugin-auto-import自动导入 Vue API、Pinia、Vue Router,无需手动 import

(2)使用ESLint

ESLint 是一个根据方案识别并报告 ECMAScript/JavaScript 代码问题的工具,其目的是使代码风格更加一致并避免错误。

1、安装并配置 ESLint

npm init @eslint/config

 按照提示,选择你需要的配置,完成所有步骤后,项目下会自动生成eslint的配置文件,安装需要的依赖包。

2、添加.eslintignore忽略文件

在根目录创建文件,根据自己情况调整

node_modules
*.md
dist
.husky**/*.md
**/*.svg
**/*.ejs
**/*.html

修改生成的配置文件

// eslint.config.mjsimport js from '@eslint/js'; // 导入 ESLint 官方 JavaScript 规则集
import tseslint from 'typescript-eslint'; // 导入 TypeScript ESLint 插件
import vue from 'eslint-plugin-vue'; // 导入 Vue 3 ESLint 插件
import prettier from 'eslint-config-prettier'; // 导入 Prettier 规则以关闭 ESLint 中与 Prettier 冲突的规则/** @type {import('eslint').Linter.Config[]} */export default [{// 指定 ESLint 需要检查的文件类型files: ['**/*.{js,mjs,cjs,ts,vue}'],// 配置 JavaScript 运行环境的全局变量和解析器选项languageOptions: {globals: { uni: 'readonly' }, // 声明 `uni` 为全局变量,且只读(适用于 UniApp)parserOptions: {ecmaVersion: 'latest', // 使用最新的 ECMAScript 语法sourceType: 'module', // 代码采用 ES 模块方式(import/export)parser: '@typescript-eslint/parser', // 使用 TypeScript ESLint 解析器,支持 TS 代码},},},// JavaScript 推荐规则(包括最佳实践、代码风格等)js.configs.recommended,// Vue 3 推荐规则(适用于 Vue 单文件组件)...vue.configs['flat/recommended'],// TypeScript 推荐规则(提供 TS 语法检查和类型规则)...tseslint.configs.recommended,// 兼容 Prettier(关闭与 Prettier 冲突的 ESLint 规则)prettier,{// 自定义 ESLint 规则,覆盖默认配置rules: {'vue/attribute-hyphenation': 'off', // 允许 Vue 组件属性使用驼峰命名(例如 `myProp` 而不是 `my-prop`)'no-var': 'warn', // 警告使用 `var`,建议使用 `let` 或 `const`'@typescript-eslint/no-unused-vars': 'error', // 报错:不允许定义未使用的变量'@typescript-eslint/no-empty-interface': 'off', // 允许定义空的 TypeScript 接口'vue/multi-word-component-names': 'off', // 允许 Vue 组件名称是单个单词(默认要求组件名称至少两个单词)'@typescript-eslint/no-empty-function': 'off', // 允许定义空函数'@typescript-eslint/no-explicit-any': 'off', // 允许使用 `any` 类型(如果不希望使用 `any`,可以改成 `warn` 或 `error`)},},
];

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28177.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何通过rust实现自己的web登录图片验证码

在进行web系统开发时&#xff0c;为保障系统登录安全&#xff0c;登录页面中的验证码必不可少。在java中&#xff0c;我们可以利用相应的2D图像库快速生成图形验证码&#xff0c;而对于rust&#xff0c;我们没有合适的标准库进行图像验证码的生成。今天&#xff0c;我们通过使用…

Unity NGUI新手向几个问题记录

1.点Button没反应 制作Button组件时&#xff0c;不光要挂载Button脚本&#xff0c;还有挂载BoxCollider BoxCollider 接收事件 2.Button点击事件的增加与删除 使用.onClick.add增加事件&#xff0c;使用.onClick.Remove,.onClick.RemoveAt,onClick.RemoveRang,onClick.Clear移…

基于SpringBoot的“扶贫助农系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“扶贫助农系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统注册…

Rust编程实战:初探WebAssembly

WebAssembly: 网页应用的性能革命 ​互联网技术日新月异&#xff0c;Web应用已经从简单的网页跃升为功能丰富的平台。然而&#xff0c;JavaScript作为Web的主力语言&#xff0c;在处理计算密集型任务时仍然存在性能瓶颈。今天&#xff0c;我们来聊一聊可能改变Web格局的技术—…

蓝桥杯4T平台(串口打印电压值)

知识点&#xff1a;串口(单片机发送数据)按键ADC 题目 配置 代码 adc.c uint16_t getadc2(void) {uint16_t adc0;HAL_ADC_Start(&hadc2);adcHAL_ADC_GetValue(&hadc2);return adc; } adc.h uint16_t getadc2(void); main.c #include "lcd.h" #include…

【异常解决】Unable to start embedded Tomcat Nacos 启动报错

Unable to start embedded Tomcat Nacos 启动报错解决方案 一、背景描述二、原因分析三、解决方案 一、背景描述 Windows 本地启动 Nacos&#xff08;2.2.0&#xff09; 服务&#xff0c;控制台报错 Unable to start embedded Tomcat。 报错信息&#xff1a;Unable to star…

Spark核心之02:RDD、算子分类、常用算子

spark内存计算框架 一、目标 深入理解RDD弹性分布式数据集底层原理掌握RDD弹性分布式数据集的常用算子操作 二、要点 ⭐️1. RDD是什么 RDD&#xff08;Resilient Distributed Dataset&#xff09;叫做**弹性分布式数据集&#xff0c;是Spark中最基本的数据抽象&#xff0c…

Machine Learning 初探

前置知识 pandas 读取文件&#xff1a;read_csv查看信息 describe&#xff1a;查看整体信息&#xff0c;包括每列的平均值、最大最小值、标准差等head&#xff1a;输出头部几行数据columns&#xff1a;输出所有列名loc&#xff1a;查询数据&#xff0c;或是根据索引取对应的数…

linux第四讲----基础开发工具vim

1.软件安装 这里以ubuntu为例&#xff0c;安装sl软件,输入这个命令即可自动安装~ 使用一下&#xff0c;输入sl&#xff0c;屏幕上会出现一个移动的小火车 之后不想要了准备卸载就输入&#xff1a; 注意&#xff1a;1&#xff09;下载软件时也可以进行搜索~ 2&#xff09;cento…

【Wireshark 02】抓包过滤方法

一、官方教程 Wireshark 官网文档 &#xff1a; Wireshark User’s Guide 二、显示过滤器 2.1、 “数据包列表”窗格的弹出过滤菜单 例如&#xff0c;源ip地址作为过滤选项&#xff0c;右击源ip->prepare as filter-> 选中 点击选中完&#xff0c;显示过滤器&#…

在 macOS 使用 .pem 私钥免密登录腾讯云服务器

前言 在腾讯云上创建服务器时&#xff0c;如果选择了「密钥对」的登录方式&#xff0c;就会得到一个 .pem 文件作为私钥。很多小伙伴在使用 macOS 系统时&#xff0c;可能不清楚如何使用这个私钥文件来 SSH 免密登录远程服务器。本文将详细介绍如何在本地配置 .pem 私钥文件并…

Android U 分屏——SystemUI侧处理

WMShell相关的dump命令 手机分屏启动应用后运行命令&#xff1a;adb shell dumpsys activity service SystemUIService WMShell 我们可以找到其中分屏的部分&#xff0c;如下图所示&#xff1a; 分屏的组成 简图 分屏是由上分屏(SideStage)、下分屏(MainStage)以及分割线组…

【Python】——使用python实现GUI图书管理系统:Tkinter+SQLite实战

本文将通过一个完整的python项目——图书管理系统&#xff0c;演示如何利用Tkinter构建GUI 界面&#xff0c;结合SQLite数据库实现增删改查功能。代码简洁易懂&#xff0c;适合python初学者学习和二次开发。 一、项目功能概览 图书管理&#xff1a;添加、查看、修改、删除图书…

文件上传靶场(1--9关)

实验环境&#xff1a; 1&#xff0c;upload的靶场环境可以去GitHub上自行查找 2&#xff0c;打开小皮面板的nginx和数据库 3&#xff0c;将文件上传的靶场部署到本地&#xff1a; 放到小皮的phpstduy_pro的www下面 小提示&#xff1a; 另外如果你用的是php7的版本建议将版…

leetcode每日一题——1745分割回文串

给你一个字符串 s &#xff0c;如果可以将它分割成三个 非空 回文子字符串&#xff0c;那么返回 true &#xff0c;否则返回 false 。 当一个字符串正着读和反着读是一模一样的&#xff0c;就称其为 回文字符串 。 示例 1&#xff1a; 输入&#xff1a;s "abcbdd"…

Python的那些事第三十九篇:MongoDB的Python驱动程序PyMongo

PyMongo:MongoDB的Python驱动程序 摘要 PyMongo 是 MongoDB 的官方 Python 驱动程序,用于在 Python 应用程序中与 MongoDB 数据库进行交互。本文将详细介绍 PyMongo 的安装、基本操作、高级功能以及实际应用案例,并通过示例代码和表格展示其强大的功能和灵活性。 1. 引言 …

Windows 使用 Docker + WSL2 部署 Ollama(AMD 显卡推理)搭建手册‌

Windows 使用 Docker WSL2 部署 Ollama&#xff08;AMD 显卡推理&#xff09;搭建手册‌ ‌手册目标‌ 在 Windows 11 上通过 ‌Docker WSL2‌ 调用 AMD 显卡运行 Ollama 推理服务。 实现 ‌低延迟、高性能的本地模型推理‌&#xff0c;同时不影响 Windows 正常使用。 标记…

【大模型基础_毛玉仁】1.1 基于统计方法的语言模型

【大模型基础_毛玉仁】1.1 基于统计方法的语言模型 1.语言模型基础1.1 基于统计方法的语言模型1.1.1 n-grams 语言模型1.1.2 n-grams 的统计学原理 1.语言模型基础 语言是概率的。语言模型&#xff08;LanguageModels, LMs&#xff09;旨在准确预测语言符号的概率。 将按照语…

IDEA 2025最新版2024.3.3软件安装、插件安装、语言设置

IntelliJ IDEA是一款由JetBrains公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于Java语言的开发&#xff0c;它通过提供丰富的功能如智能代码补全、代码分析、版本控制集成等来提高开发效率。 IDEA有社区版和专业版两个版本&#xff0c;社区版是免费开…

springbootWeb入门--创建springbootweb项目

步骤&#xff1a; 1.建立空工程 2.选择项目的jdk版本 3.在工程中建立模块&#xff0c;选择“spring initilazer”,类型勾选“maven” 4.勾选“spring web”之后&#xff0c;就无需再自行写dependcy了。 5.等待联网下载 6.生成的工程文件&#xff0c;如下绿色框中文件&…