Vscode 构建 uniapp vue3 + ts 微信小程序项目

前言

为什么要使用 Vscode 来开发构建 uniapp 项目?从个人角度来讲,仅是想要 Vscode 丰富的插件生态,以及最重要的优秀的 TtypeScript 类型检查支持,因为本人是 TS 重度使用者。

如果你更习惯使用 js 进行开发,使用 HBuilderX 要比 Vscode 更加方便。

注:后面的操作,皆以微信小程序为例。

整体思路

  1. 通过 uni-app 提供的使用命令行构建项目的方式,构建出 Vue3 + TS 的 uni-app 项目(uni-app 自身就是基于 Vue.js 的跨平台开发框架)
  2. Vscode 中安装 uni-app 插件,弥补相比 HBuilderX 缺少的便捷操作
  3. 安装相关的 @types 依赖,更好的支持 typescript
  4. 通过提供的编译脚本,将项目编译成期望的最终格式:将 Vue3 + TS 开发的 uni-app 项目编译成微信小程序项目(wxml、wxss)
  5. 微信开发者工具导入编译后的小程序项目,展示最终效果。恭喜:此时在 Vscode 中对于代码变动,可以立即更新在微信开发者工具中

实践

1. 通过命令行构建

官网教程

创建以 typescript 开发的工程:

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

如果超时被墙了,提示:

! could not fetch remote https://github.com/dcloudio/uni-preset-vue
! could not find commit hash for vite-ts

打开 https://github.com/dcloudio/uni-preset-vue 切换到 vite-ts 分支下载 zip 后缀的压缩文件,解压到本地再次打开。

成功、失败截图:
通过命令行构建

项目导入 vscode:
项目导入 vscode

2. vscode 安装 uni-app 插件

  1. uni-create-view:快速创建 uniapp 视图与组件
  2. uni-helper:uni-app 代码提示
  3. uniapp小程序扩展:自动提示标签可用属性,鼠标悬浮查询属性文档,新增支持 uview 的组件提示

3. 项目引入 @types 依赖

npm i -D @uni-helper/uni-app-types @types/wechat-miniprogram

  1. @uni-helper/uni-app-types:官网地址
    @uni-helper/uni-app-types
  2. @types/wechat-miniprogram:微信小程序的类型提示依赖

tsconfig.json 引入类型:
tsconfig.json 引入类型

{
    "compilerOptions": {
        "target": "esnext",
        "module": "esnext",
        "strict": true,
        "moduleResolution": "node",
        "esModuleInterop": true,
        "sourceMap": true,
        "skipLibCheck": true,
        "importHelpers": true,
        "allowSyntheticDefaultImports": true,
        "useDefineForClassFields": true,
        "resolveJsonModule": true,
        "baseUrl": ".",
        "paths": {
            "@/*": [
                "./src/*"
            ]
        },
        "lib": [
            "esnext",
            "dom"
        ],
        "types": [
            "@dcloudio/types",
            "@types/wechat-miniprogram",
            "@uni-helper/uni-app-types",
            "@uni-helper/uni-ui-types"
        ]
    },
    "vueCompilerOptions": {
        "plugins": [
            "@uni-helper/uni-app-types/volar-plugin"
        ]
    },
    "include": [
        "src/**/*.ts",
        "src/**/*.d.ts",
        "src/**/*.tsx",
        "src/**/*.vue",
        "*.d.ts"
    ]
}

4. 编译

npm run dev:mp-weixin

编译

5. 实时在微信开发者工具预览

微信开发者工具中导入编译后的项目

微信开发者工具

vscode 中修改 index.vue:

vscode 中修改 index.vue

切回微信开发者工具:

切回微信开发者工具

引入官方 uni-ui 库

1. 安装 uni-ui 依赖:

npm i sass -D
npm i sass-loader
npm i @dcloudio/uni-ui

2. 配置 easycom(Vue 文件中自动导入 ui 组件):

// pages.json
{
	"easycom": {
		"autoscan": true,
		"custom": {
			// uni-ui 规则如下配置
			"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
		}
	},
	
	// 其他内容
	pages:[
		// ...
	]
}

3. 安装类型依赖:

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

4. tsconfig.json 引入类型:

tsconfig.json 引入 ui 库的类型

引入 pinia 全局状态管理库

npm i pinia --force
npm i pinia-plugin-persistedstate --force

使用 --force 参数是因为避免检测失败而导致无法下载依赖:pinia 用了 peerDependency 配置了 @vue/composition-api,这是为了兼容了vue2的选项式语法来设置的,npm没有识别,还是会检测它的版本与当前版本不符合。

注意!在配置 pinia store 的持久化时,必须重写行为(不在使用 localStorage,而是使用 uni-app 的跨平台 api):

重写pinia持久化行为

{
    persist: {
        storage: {
            setItem(key, value) {
                uni.setStorageSync(key, value)
            },
            getItem(key) {
                return uni.getStorageSync(key)
            }
        }
    }
}

否则微信开发工具控制台会抛出异常:

pinia-localstorage

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[游戏开发] Unity中使用FlatBuffer

什么是FlatBuffer 为什么用FloatBuffer,优势在哪? 下图是常规使用的各种数据存储类型的性能对比。 对序列化数据的访问不需要打包和拆包——它将序列化数据存储在缓存中,这些数据既可以存储在文件中,又可以通过网络原样传输&…

软件工程 概述

软件 不仅仅是一个程序代码。程序是一个可执行的代码,它提供了一些计算的目的。 软件被认为是集合可执行的程序代码,相关库和文档的软件。当满足一个特定的要求,就被称为软件产品。 工程 是所有有关开发的产品,使用良好定义的&…

负载均衡策略:L(P)策略;L(Max) ;L(LDS)

负载均衡策略:L(P)策略;L(Max) ;L(LDS) 1. Proportion load distribution L(P)策略; 策略含义:服务器不配置为可变服务率,调度器按照服务器服务率的倒数比例分配负载。即每个服务器分配到的任务量与该服务器服务率的倒数成正比 2. (L(Max)) load distribution((L…

探店小程序:解锁商业新生态,定制未来

在数字化浪潮席卷全球的今天,商业的边界正在被重新定义。随着移动互联网技术的飞速发展,探店小程序作为一种新兴的商业模式,正以其独特的优势迅速成为连接商家与消费者的桥梁。我们刚刚为一家客户成功交付了一款集分销、分润、商业模式定制开…

从EXCEL表格到WEB TABLE的实践

前言 EXCEL管理数据 Bootstrap Bootstrap 是一个流行的开源前端框架,它由 Twitter 的员工开发,用于快速开发响应式和移动设备优先的网页和应用程序。 jQuery jQuery 是一个快速、小巧且功能丰富的 JavaScript 库。它简化了 HTML 文档的遍历、事件处理…

HarmonyOS(65) ArkUI FrameNode详解

Node 1、Node简介2、FrameNode2.1、创建和删除节点2.2、对FrameNode的增删改2.3、 FramNode的查询功能3、demo源码4、总结5、参考资料1、Node简介 在HarmonyOS(63) ArkUI 自定义占位组件NodeContainer介绍了自定义节点复用的原理(阅读本本篇博文之前,建议先读读这个),在No…

独家首发 | 基于 KAN、KAN卷积的轴承故障诊断模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…

【总结·反思·汇报·思考02】裸辞后,我的一些感想和感悟。

Hello,大家好! 首先,我需要向大家道个歉,对不起!因为最近发生了一些事情,博客文章一直没有更新。(90度鞠躬道歉) 那么,最近到底发生了什么呢?相信大家已经从…

解密分布式锁:保障系统一致性的关键

作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 目录 1. 前言 2. 为何要使用分布式锁&…

HarmonyOS-高级(一)

文章目录 一次开发、多端部署自由流转 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年12月09日12点19分 一次开发、多端部署 布局能力 自适应布局 拉伸能力均分能力占比能力缩放…

河工oj第七周补题题解2024

A.GO LecturesⅠ—— Victory GO LecturesⅠ—— Victory - 问题 - 软件学院OJ 代码 统计 #include<bits/stdc.h> using namespace std;double b, w;int main() {for(int i 1; i < 19; i ) {for(int j 1; j < 19; j ) {char ch; cin >> ch;if(ch B) b …

开源架构安全深度解析:挑战、措施与未来

开源架构安全深度解析&#xff1a;挑战、措施与未来 一、引言二、开源架构面临的安全挑战&#xff08;一&#xff09;代码漏洞 —— 隐藏的定时炸弹&#xff08;二&#xff09;依赖项安全 —— 牵一发而动全身&#xff08;三&#xff09;社区安全 —— 开放中的潜在危机 三、开…

Ubuntu上使用system()函数运行不需要输入密码

使用system()运行一些终端命令的时候&#xff0c;需要sudo权限&#xff0c;也就是必须输入密码&#xff0c;那么在程序自启动的时候就无法成功启动。如果设置Ubuntu下所有操作都不需要密码&#xff0c;安全性太低&#xff0c;所以我们可以将需要用到的终端指令给予无需输入密码…

HBuilderX(uni-app)Vue3路由传参和接收路由参数!!

uni-app搭建小程序时候Vue3语法接收路由参数&#xff0c;去官方文档查看&#xff0c;是onLoad的option接收参数&#xff0c;我试过&#xff0c;接收不到&#xff0c;上网查各种方法也是不太行&#xff0c;最后自己琢磨出来了&#xff0c;这参数藏得还挺深&#xff01;&#xff…

操作系统(1)OS的基本概念

一、定义 操作系统&#xff08;OS&#xff09;是控制和管理整个计算机系统的硬件与软件资源&#xff0c;并合理地组织、调度计算机的工作与资源的分配&#xff0c;进而为用户和其他软件提供方便接口与环境的程序集合。它是计算机系统中最基本的系统软件。 二、功能 资源管理&am…

gridcontrol多行表头

效果如下 只需这样做,设置该属性为对应的值

Formality:set_svf命令

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 svf文件的全称是Setup Verification for Formality&#xff0c;即Design Compiler提供给Formality的设置验证文件&#xff0c;它的作用是为Formality的指导模式(Gui…

【蓝桥杯每日一题】重新排序

重新排序 2024-12-8 蓝桥杯每日一题 重新排序 前缀和 差分 题目大意 给定一个数组 A 和一些查询 L i , R i Li_,R_i Li,​Ri​, 求数组中第 L i L_i Li​至第 R i R_i Ri​个元素之和。 小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查 询结果的和尽可能…

LabelImg使用教程

(yolov5scondaPython3123) D:\PyCharm20240724\20240724PyCharmProject>conda.bat deactivate D:\PyCharm20240724\20240724PyCharmProject>conda activate labelimg_env (labelimg_env) D:\PyCharm20240724\20240724PyCharmProject> labelimg 创建快捷键方式

洛谷 P1179 [NOIP2010 普及组] 数字统计 C语言

题目&#xff1a; https://www.luogu.com.cn/problem/P1179 思路&#xff1a;直接暴力过 代码&#xff1a; #include<iostream> using namespace std; int cnt(int x) {int sum 0;while(x){int temp x %10;if(temp 2){sum;}x x/10;}return sum; } int main(void) …