從零搭建uniapp項目

目錄

創建uni-app項目

基礎架構

安裝 uni-ui 組件庫

安裝sass依賴

easycom配置組件自動導入

配置view等標簽高亮聲明

配置uni-ui組件類型聲明

解決 標簽 錯誤

關于tsconfig.json中提示報錯

關于非原生標簽錯誤(看運氣)

安裝 uview-plus 組件庫

?編輯

Pinia 配置

pinia 依賴安裝

測試

pinia 持久化配置


創建uni-app項目

npx degit dcloudio/uni-preset-vue#vite-ts new-project-name

new-project-name:這里更改一下為自己的項目名稱

基礎架構

安裝 uni-ui 組件庫

官網:uni-app官網

通過官網說明文檔相對應的搭建

pnpm i @dcloudio/uni-ui

安裝sass依賴

pnpm i sass@1.63.2 -D
pnpm i sass-loader@10.4.1 -D

easycom配置組件自動導入

// pages.json
{// uniapp 配置文件"easycom": {"autoscan": true,// 以正則方式自定義組件匹配規則"custom": {// uni-ui 規則如下配置"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue",// 以serive開頭的組件,在 components 文件夾中查找引入(需要重啟服務器)//"^serive(.*)": "@/components/serive/serive$1.vue"}},// 其他內容pages:[// ...]
}

配置view等標簽高亮聲明

pnpm i -D miniprogram-api-typings @uni-helper/uni-app-types

安裝成功后復制對應的依賴包名放置在 tsconfig.json中的type字段

同時加上?vueCompilerOptions 配置

  "vueCompilerOptions": {"experimentalRuntimeMode": "runtime-uni-app"},

配置uni-ui組件類型聲明

組件聲明類型依賴官網(注意:如果緩慢需要魔法):@uni-helper/uni-ui-types - npm

pnpm i -D @uni-helper/uni-ui-types

安裝成功后復制對應的依賴包名放置在 tsconfig.json中的type字段

解決 標簽 錯誤

關于tsconfig.json中提示報錯

選項“importsNotUsedAsValues”已刪除。請從配置中刪除它。請改用“verbatimModuleSyntax”

主要是我們使用的tsconfig版本太低了

步驟1:

更新@vue/tsconfig版本,在package.json文件中找到@vue/tsconfig,把版本號改為0.7.0

 "@vue/tsconfig": "^0.7.0",

隨后運行pnpm 更新依賴

pnpm install

最后更改 tsconfig 地址?

  "extends": "@vue/tsconfig/tsconfig.dom.json",

這樣就不報錯了

關于非原生標簽錯誤(看運氣)

當我們發現正常標簽報錯

更改我們的 tsconfig.json,參考一下我下面的配置

{"extends": "@vue/tsconfig/tsconfig.dom.json","compilerOptions": {"sourceMap": true,"baseUrl": ".","paths": {"@/*": ["./src/*"]},"lib": ["esnext", "dom"],// 類型聲明文件"types": ["@uni-helper/uni-ui-types",   // uni-ui 組件類型"@dcloudio/types", // uni-app API 類型"miniprogram-api-typings", // 原生微信小程序類型"@uni-helper/uni-app-types" // uni-app 組件類型]},// vue 編譯器類型,校驗標簽類型"vueCompilerOptions": {//新增加的配置 experimentalRuntimeMode 已廢棄,現調整為 nativeTags,請升級 Volar 插件至最新版本"nativeTags": ["block", "component", "template", "slot"],// experimentalRuntimeMode 已廢棄,請升級 Vue - Official 插件至最新版本"plugins": ["@uni-helper/uni-app-types/volar-plugin"]},"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

如果還是爆紅,多次嘗試重啟?Vue - Official 插件,以及重啟vscode,我就是這樣不明不白的改好了。

安裝 uview-plus 組件庫

執行命令安裝 uview 依賴

pnpm install uview-plus

掛載使用

import uviewPlus from 'uview-plus'app.use(uviewPlus);

由于uview-plus 不是原生組件,所以我們要自定義聲明類型,這樣就不會爆紅波浪線了

uview-plus.d.ts

// src/types/uview-plus.d.ts
declare module 'uview-plus' {import { Plugin } from 'vue';const install: Plugin;export default install;
}

全局樣式配置

 /* src\uni.scss */
@import  'uview-plus/theme.scss';
// src\App.vue
<style lang="scss">/* 注意要寫在第一行,同時給style標簽加入lang="scss"屬性 */@import "uview-plus/index.scss";
</style>

自動導入

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

Pinia 配置

Pinia官網(注意:如果緩慢需要魔法):Pinia | The intuitive store for Vue.js

pinia 依賴安裝

執行命令安裝 Pinia 依賴

pnpm install pinia

分包創建目錄

index.ts配置pinia

import { createPinia } from "pinia";
const pinia = createPinia();    // 創建 Pinia 實例
// 默認導出,給 main.ts 使用
export default pinia;
// 模塊統一導出
export * from "./modules/counter";

main.ts 使用 pinia

import { createSSRApp } from "vue";
import App from "./App.vue";
import pinia from "./stores";
export function createApp() {const app = createSSRApp(App);app.use(pinia); // 掛載piniareturn {app,};
}
測試

counter.ts

import { defineStore } from "pinia";
import { computed, ref } from "vue";
export const useCounterStore = defineStore("counter", () => {// 聲明 數據類型const count = ref(0);// 定義 計數器方法const increment = () => {count.value++;}// 聲明基于數據派生的計算屬性const double = computed(() => {return count.value * 2;})// 返回 計數器數據、方法、計算屬性return {count,double,increment,}},
);

Test.vue

<script lang="ts" setup>
import { useCounterStore } from '@/stores';
import { storeToRefs } from 'pinia';
const counter = useCounterStore();const { count } = storeToRefs(counter);
const {double} = storeToRefs(counter)
const {increment} =  counter</script><template><div class="Test"><uni-card><text>計數:{{ count }}</text><br><text>雙倍:{{ double }}</text></uni-card><up-button @tap="increment">+</up-button></div>
</template><style lang="scss" scoped></style>

pinia 持久化配置

執行命令安裝 pinia-plugin-persistedstate?依賴

pnpm i pinia-plugin-persistedstate

?index.ts配置持久化

import { createPinia } from "pinia";
import piniaPluginPersistedstate from "pinia-plugin-persistedstate";
const pinia = createPinia();    // 創建 Pinia 實例pinia.use(piniaPluginPersistedstate);   // 使用 pinia-plugin-persistedstate 持久化配置// 默認導出,給 main.ts 使用
export default pinia;// 模塊統一導出
export * from "./modules/counter";

配置持久化 counter.ts


import { defineStore} from "pinia";
import { computed, ref } from "vue";export const useCounterStore = defineStore("counter", () => {// 聲明 數據類型const count = ref(100);// 定義 計數器方法const increment = () => {count.value++;console.log('增加了:',count.value);}// 聲明基于數據派生的計算屬性const double = computed(() => {return count.value * 2;})// 返回 計數器數據、方法、計算屬性return {count,double,increment,}  
},// 配置項 {// 網頁端的 持久化配置// persist: true// 移動端的 持久化配置// persist: {//     storage: localStorage,//     key: 'count',// }// 小程序的 持久化配置, 同時兼容大部分瀏覽器H5persist: {storage: {getItem(key) {return uni.getStorageSync(key);},setItem(key, value) {return uni.setStorageSync(key, value);},}}}
);

報錯?X [ERROR] Could not resolve "destr"

解決方法:

降低 持久化依賴的版本

  "pinia-plugin-persistedstate": "^3.2.3",

測試效果,成功持久化存儲到本地

請求配置

添加攔截器

// src/utils/http.tsimport { useUserStore } from "@/stores/modules/user"
// 基礎的請求地址
const baseUrl = "http://localhost:3000"
// 攔截器配置
const httpInterceptor = {// 攔截前觸發invoke(options: UniApp.RequestOptions) {// 1、非 http 開頭需拼接地址if (!options.url.startsWith('http')) {options.url = baseUrl + options.url}// 2、請求超時,如果沒有配置則默認 60soptions.timeout = options.timeout || 10000// 3、添加小程序端請求頭標識options.header = options.header || {...options.header,  // 如果請求設置方法前配置了 header 則保留之前配置過的'source-client': 'uniapp'}// 4、添加 token 請求標識const userStore = useUserStore();// 這里 ?. 表示 可選鏈操作符,如果 userStore.userInfo 為空,則 token 為 undefinedconst token = userStore.userInfo?.token;if  (token) {options.header['Authorization'] = 'Bearer ' + token;}}
}
// 添加攔截器,這里共用一份攔截器
uni.addInterceptor('request', httpInterceptor)
uni.addInterceptor('uploadFile', httpInterceptor)

添加封裝請求函數

// src/utils/http.ts// .....  接著添加// 2.3 指定響應數據結構
interface Data<T>{code: number,msg: string,result: T
}
// 2.2 添加類型,支持泛型
const http = <T>(options: UniApp.RequestOptions) => {// 返回 Promise 對象return new Promise<Data<T>>((resolve, reject) => {uni.request({...options,// 2、請求成功success: (res) => {// 2.1 提取核心數據 res.data// 類型斷言指定數據類型resolve(res.data as Data<T>)},fail: (err: UniApp.GeneralCallbackResult) => {reject(err)}})})
}

添加響應攔截

// src/utils/http.ts// .....  接著添加// 2.2 添加類型,支持泛型
const http = <T>(options: UniApp.RequestOptions) => {// 返回 Promise 對象return new Promise<Data<T>>((resolve, reject) => {uni.request({...options,// 2、請求成功success: (res) => {// 2.1 提取核心數據 res.data// 狀態碼 2xx,axios 就是這樣設計的if (res.statusCode >= 200 && res.statusCode < 300) {// 類型斷言指定數據類型resolve(res.data as Data<T>)} else if (res.statusCode === 401) {// 401 錯誤 -> 清理用戶信息,跳轉登錄頁const userStore = useUserStore();userStore.clearUserInfo();uni.navigateTo({        // 跳轉登錄頁url: '/pages/login/login'});reject(res);} else {// 其他錯誤 --> 根據后端錯誤信息輕提示uni.showToast({title: (res.data as Data<T>).msg || '請求錯誤',icon: 'none'});reject(res);}},// 響應失敗fail: (err: UniApp.GeneralCallbackResult) => {uni.showToast({title:'網絡請求錯誤,請嘗試切換網絡',icon: 'none'});reject(err)}})})
}

--------------------------------- 持續更新中---------------------------------

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83976.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83976.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83976.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis主從復制的原理一 之 概述

概述 本文概要性的介紹了Redis主從復制原理&#xff0c;及新舊版本主從復制的區別&#xff0c;優缺點。具體的主從復制過程可詳見「Redis主從復制原理二 之 主從復制工作流程」 舊版主從復制的實現 Redis的復制功能分為 同步&#xff08;sync&#xff09;和 命令傳播&#xff…

網絡原理 4-TCP3

上篇文章&#xff0c;我們講了TCP協議的連接管理&#xff08;”三次握手“和”四次揮手“的過程&#xff09;。 4、滑動窗口 這個滑動窗口是TCP中非常有特點的機制。我們知道&#xff0c;TCP是通過前面講的三個機制&#xff1a;確認應答&#xff0c;超時重傳&#xff0c;連接…

【使用 Loki + Promtail + Grafana 搭建輕量級容器日志分析平臺】

使用 Loki Promtail Grafana 搭建輕量級容器日志分析平臺 摘要 本文介紹如何通過 Docker Compose 快速搭建 Loki 日志存儲、Promtail 日志采集和 Grafana 日志可視化/告警的完整流程。用最小化示例演示核心配置、常見問題排查和告警規則設置&#xff0c;幫助讀者快速上手。…

CRMEB 中 PHP 快遞查詢擴展實現:涵蓋一號通、阿里云、騰訊云

目前已有一號通快遞查詢、阿里云快遞查詢擴展 擴展入口文件 文件目錄 crmeb\services\express\Express.php 默認一號通快遞查詢 namespace crmeb\services\express;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use think\Container; use thi…

使用 Python 自動化 Word 文檔樣式復制與內容生成

在辦公自動化領域&#xff0c;如何高效地處理 Word 文檔的樣式和內容復制是一個常見需求。本文將通過一個完整的代碼示例&#xff0c;展示如何利用 Python 的 python-docx 庫實現 Word 文檔樣式的深度復制 和 動態內容生成&#xff0c;并結合知識庫中的最佳實踐優化文檔處理流程…

【MATLAB代碼】基于MCC(最大相關熵)的EKF,一維濾波,用于解決觀測噪聲的異常|附完整代碼,訂閱專欄后可直接查看

本文所述的代碼實現了一種基于最大相關熵準則(Maximum Correntropy Criterion, MCC)的魯棒性卡爾曼濾波算法(MCC-KF),重點解決傳統卡爾曼濾波在觀測噪聲存在異常值時估計精度下降的問題。通過引入高斯核函數對殘差進行加權處理,有效降低了異常觀測值對狀態估計的干擾。訂…

46、web實驗-遍歷數據與頁面bug修改

46、web實驗-遍歷數據與頁面bug修改 在Web開發中&#xff0c;遍歷數據和修改頁面bug是常見的任務。以下是關于這兩個主題的講解&#xff1a; ### 一、遍歷數據 **目的**&#xff1a;在頁面上動態展示數據&#xff0c;例如用戶列表、商品信息等。 **常用方法**&#xff1a; ####…

華為云Flexus+DeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建自己的自定義聊天助手

華為云FlexusDeepSeek征文&#xff5c;體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建自己的自定義聊天助手 什么是華為云ModelArts 華為云ModelArts ModelArts是華為云提供的全流程AI開發平臺&#xff0c;覆蓋從數據準備到模型部署的全生命周期管理&#xff0c;幫助…

Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token

Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token 目錄 Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token功能解析工作機制應用場景舉例說明技術要點在自然語言處理(NLP)領域 都是<CLS> + <SEP>嗎?一、CLS和SEP的作用與常見用法1. **CLS標…

R語言AI模型部署方案:精準離線運行詳解

R語言AI模型部署方案:精準離線運行詳解 一、項目概述 本文將構建一個完整的R語言AI部署解決方案,實現鳶尾花分類模型的訓練、保存、離線部署和預測功能。核心特點: 100%離線運行能力自包含環境依賴生產級錯誤處理跨平臺兼容性模型版本管理# 文件結構說明 Iris_AI_Deployme…

JAVA畢業設計224—基于Java+Springboot+vue的家政服務系統(源代碼+數據庫)

畢設所有選題&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的家政服務系統(源代碼數據庫)224 一、系統介紹 本項目前后端分離&#xff0c;分為用戶、家政人員、管理員三種角色 1、用戶&#xff1a; 登錄、注冊、輪播…

滴滴 服務端 面經

一、緩存與數據庫的使用場景及性能差異 1. 緩存的適用場景 高頻讀、低頻寫場景&#xff1a;如商品詳情頁、用戶信息等讀多寫少的數據&#xff0c;減少數據庫壓力。實時性要求不高的數據&#xff1a;如首頁推薦列表、統計數據&#xff08;非實時更新&#xff09;&#xff0c;允…

linux操作系統---網絡協議

目錄 案例演練----網絡搭建 路由啟配置 多個路由情況下如何聯通 靜態路由 案例演練----網絡搭建 Cisco交換機的命令行用戶模式1 switch> 特權模式1 switch>enable disable回到用戶模式 2 switch#全局配置模式1 switch#config terminal 2 switch(co…

華為OD機試_2025 B卷_計算某個字符出現次數(Python,100分)(附詳細解題思路)

文章目錄 題目描述字符計數解析&#xff1a;簡單高效的統計方法核心解題思路完整代碼實現應用場景擴展 題目描述 寫出一個程序&#xff0c;接受一個由字母、數字和空格組成的字符串&#xff0c;和一個字符&#xff0c;然后輸出"輸入字符串&#xff08;第二行輸入的字符&a…

華為倉頡語言初識:并發編程之同步機制(上)

前言 線程同步機制是多線程下解決線程對共享資源競爭的主要方式&#xff0c;華為倉頡語言提供了三種常見的同步機制用來保證線程同步安全&#xff0c;分別是原子操作&#xff0c;互斥鎖和條件變量。本篇文章詳細介紹主要倉頡語言解決同步機制的方法&#xff0c;建議點贊收藏&a…

樹莓派遠程登陸RealVNC Viewer出現卡頓

原因是&#xff1a;沒有連接顯示屏&#xff0c;圖像傳輸會受到限制。 沒有顯示屏怎么解決&#xff1a; &#x1f4dd; 樹莓派5虛擬顯示器配置教程&#xff08;強制啟用全性能GPU渲染&#xff09; &#x1f527; 步驟1&#xff1a;安裝虛擬顯示驅動 bash 復制 下載 # 更…

go-zero微服務入門案例

一、go-zero微服務環境安裝 1、go-zero腳手架的安裝 go install github.com/zeromicro/go-zero/tools/goctllatest2、etcd的安裝下載地址根據自己電腦操作系統下載對應的版本&#xff0c;具體的使用自己查閱文章 二、創建一個user-rpc服務 1、定義user.proto文件 syntax &qu…

[BIOS]VSCode zx-6000 編譯問題

前提&#xff1a;Python 3.6.6及以上版本安裝成功&#xff0c;Python 3.6.6路徑加到了環境變量# DEVITS工具包準備好 問題&#xff1a;添加環境變量 1&#xff1a;出現環境變量錯誤&#xff0c;“py -3” is not installed or added to environment variables #先在C:\Windows里…

【Linux】系統部分——進程控制

11.進程控制 文章目錄 11.進程控制一、進程創建二、進程終止退出碼進程終止的方式 三、進程等待進程等待的方式獲取?進程status小程序阻塞與非阻塞等待 四、進程程序替換替換原理進程程序替換的接口——exec替換函數 五、總結 一、進程創建 之前學習了fork()函數創建子進程&a…

【讀論文】U-Net: Convolutional Networks for Biomedical Image Segmentation 卷積神經網絡

摘要1 Introduction2 Network Architecture3 Training3.1 Data Augmentation 4 Experiments5 Conclusion背景知識卷積激活函數池化上采樣、上池化、反卷積softmax 歸一化函數交叉熵損失 Olaf Ronneberger, Philipp Fischer, Thomas Brox Paper&#xff1a;https://arxiv.org/ab…