平地起高楼: 环境搭建

技术选型

本小册是采用纯前端的技术栈模拟实现小程序架构的系列文章,所以主要以前端技术栈为主,但是为了模拟一个App应用的效果,以及小程序包下载管理流程的实现,我们还是需要搭建一个基础的App应用。这里我们将选择 Tauri2.0 来作为基础App的搭建,主要考虑:

  • Tauri 本身是一个跨端开发框架,页面部分开发直接采用前端技术即可
  • 轻量,相比于 Electron 框架,在创建和启动编译上都有更大的优势
  • 生态比较完善,如本小册会用到的文件操作相关的能力官方也有相应的 fs-plugin 进行支持

除了基础的App环境搭建启动外,前端实现方面我们将采用:

  • 使用 pnpm 进行项目依赖管理
  • Vue3 搭建App应用界面
  • 使用 Web Worker 运行小程序逻辑线程
  • 使用 Iframe 运行小程序UI线程页面渲染

现在让我们开始构建起小程序框架的基础开发环境吧! 🎉🎉🎉🎉🎉

基于Tauri创建App应用

创建第一个 tauri 项目: 详细的项目创建流程可以查看官方文档Create a Project | tauri

pnpm create tauri-app

运行上述创建命令后按照提示填写项目信息即可:

  • Choose which language to use for your frontend › TypeScript / JavaScript (pnpm, yarn, npm, bun)
  • Choose your package manager › pnpm
  • Choose your UI template › Vue
  • Choose your UI flavor › Typescript

项目创建完成后,进入项目目录安装依赖并启动:

cd tauri-apppnpm installpnpm tauri dev

运行完上述命令后,将会拉起一个页面窗口,此时表明你的项目已经成功创建并启动啦 👏👏👏👏

在这里插入图片描述

构建基础App页面

使用 Tauri 创建完成App项目后,我们开始做一些简单的改造,让页面呈现一个手机样式并渲染一个小程序列表,方便后续测试小程序的打开

打开我们的App项目,项目结构大致如下:

├── index.html 前端页面HTML
├── package.json
├── public/
│   ├── tauri.svg
│   └── vite.svg
├── src-tauri/
│   ├── Cargo.lock
│   ├── Cargo.toml
│   ├── build.rs
│   ├── capabilities/ webview窗口功能权限配置
│   │   └── default.json
│   ├── gen/
│   │   └── schemas/
│   ├── icons/ App 相关的图标
│   ├── src/ rust部分开发目录
│   │   ├── lib.rs
│   │   └── main.rs
│   └── tauri.conf.json  App 相关的一些基础配置
├── src/ 前端 Vue 项目的开发目录
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts

现在我们调整App窗口尺寸为一个手机尺寸: 414 * 828

// src-tauri/tauri.conf.json"app": {"windows": [{"title": "mini_wx_app","width": 414,"height": 828}],},

保存后应用会重新刷新启动,现在我们的应用窗口就已经变成我们设定的手机尺寸啦!

构建一个基础的前端小程序列表页面

现在到了我们最熟悉的前端项目开发部分,我们将在 src 目录下完成前端页面的开发和小程序逻辑的开发工作;

引入前端样式库

项目中的基础样式我们将使用 tailwind css 来完成,现在我们给项目中接入一下 tailwind

安装依赖

pnpm add tailwindcss @tailwindcss/vite

在Vite中配置

// vite.config.ts
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'export default defineConfig({plugins: [ tailwindcss() ]
})

导入 Tailwind CSS

我们在 src/assets 下创建一个 styles 目录,并创建一个base.css 的文件

/* src/assets/styles/base.css */@import "tailwindcss";

创建好这个文件后并在Vue项目的入口文件导入它:

// src/main.ts
+ import './assets/styles/base.css';

现在我们删除App.vue 中的多余逻辑,加上一点儿 tailwind css 样式类,确认 tailwind css 是否正确引入

<script setup lang="ts">
</script><template><main class="container w-screen h-screen bg-gray-100 p-6 box-border overflow-x-hidden"></main>
</template>
构建小程序列表

我们先来模拟几个小程序的数据列表

// src/constants/apps.tsexport const apps = [{appId: 'douyin',name: '抖音',logo: 'https://play-lh.googleusercontent.com/xey8dXOB53LtCR97JhDH7T-6np_sUBBE9iF7WP4Sp6T55oO28e6hic1LFTklCELw9Iw'},{appId: 'meituan',name: '美团',logo: 'https://companieslogo.com/img/orig/3690.HK-a1f4c236.png?t=1720244490'},{appId: 'jindong',name: '京东',logo: 'https://companieslogo.com/img/orig/JD-642e307f.png?t=1720244492'}
]

然后使用 vue 将列表渲染到页面上即可:

<script setup lang="ts">
import { apps } from '@/constants/apps';
</script><template><main class="container w-screen h-screen bg-gray-100 p-6 box-border overflow-x-hidden flex flex-col gap-4"><div class="app-item flex items-center gap-4 px-4 py-2 rounded-md bg-white shadow-md hover:bg-gray-200 overflow-hidden" v-for="app in apps" :key="app.appId"><img class="app-logo w-10 h-10 rounded-md" :src="app.logo" /><span class="text-base">{{ app.name }}</span></div></main>
</template>

最终我们的页面效果如下:

在这里插入图片描述

至此,我们几个基础的开发环境就搭建好了;后面开始我们就将在这个环境下完成小程序架构的构建,一起加油吧~~ 👏👏👏👏

本节代码已同步至github仓库: mini-wx-app

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

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

相关文章

langgraph学习2 - MCP编程

3中通信方式&#xff1a; 目前sse用的很少 3.开发mcp框架 主流框架2个&#xff1a; MCP skd 官方 Fast Mcp V2 &#xff0c;&#xff08;V1捐给MCP 官方&#xff09; 大模型如何识别用哪个tools&#xff0c; 以及如何使用tools&#xff1a;

CSS 与 JavaScript 加载优化

&#x1f4c4; CSS 与 JavaScript 加载优化指南&#xff1a;位置、阻塞与性能 让你的网页飞起来&#xff01;&#x1f680; 本文详细解析 CSS 和 JavaScript 标签的放置位置如何影响页面性能&#xff0c;涵盖阻塞原理、浏览器机制和最佳实践。掌握这些知识可显著提升用户体验…

WSL安装发行版上安装podman

WSL安装发行版上安装podman 1.WSL拉取发行版1.1 拉取2.2.修改系统拉取的镜像&#xff0c;可以加速软件包的更新 2.podman安装2.1.安装podman 容器工具2.2.配置podman的镜像仓库2.3.拉取n8n镜像并创建容器 本文在windows11上&#xff0c;使用WSL拉取并创建ubuntu24.04虚拟机&…

Excel 常用快捷键与对应 VBA 方法/属性清单

功能描述快捷键VBA 对应方法/属性 (核心逻辑)说明导航 (类似 End 方向键)这些是 End 键行为的直接对应向下到连续区域末尾Ctrl ↓ActiveCell.End(xlDown)从当前单元格向下&#xff0c;遇到第一个空单元格停止。向上到连续区域开头Ctrl ↑ActiveCell.End(xlUp)从当前单元格向上…

计算机组成原理与体系结构-实验四 微程序控制器 (Proteus 8.15)

一、实验目的 1、理解“微程序”设计思想&#xff0c;了解“指令-微指令-微命令”的微程序结构。 2、掌握微程序控制器的结构和设计方法。 二、实验内容 设计一个“最简版本”的 CPU 模型机&#xff1a;利用时序发生器来产生 CPU 的预定时序&#xff0c;通过微程序控制器的自…

安卓端某音乐类 APP 逆向分享(二)协议分析

以歌曲搜索协议为例&#xff0c;查看charles中歌曲搜索协议详情 拷贝出搜索协议的Curl形式 curl -H Host: interface3.music.xxx.com -H Cookie: EVNSM1.0.0; NMCIDoufhty.1667355455436.01.4; versioncode8008050; buildver221010200836; resolution2392x1440; deviceIdYDwXa…

七天学会SpringCloud分布式微服务——03——Nacos远程调用

1、微服务项目配置类放在地方 配置类型应放位置说明通用配置类&#xff08;如&#xff1a;跨服务通用的拦截器、全局异常处理、统一响应体封装等&#xff09;可放在一个**公共模块&#xff08;common/config&#xff09;**中&#xff0c;被各服务引入实现代码复用&#xff0c;…

基于Java+Spring Boot的校园闲置物品交易系统

源码编号&#xff1a;S561 源码名称&#xff1a;基于Spring Boot的校园闲置物品交易系统 用户类型&#xff1a;多角色&#xff0c;用户、商家、管理员 数据库表数量&#xff1a;12 张表 主要技术&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven 运行环境&#xff1…

SpringBoot 的 jar 包为什么可以直接运行?

一、普通jar包和SpringBoot jar包有什么区别&#xff1f;什么是jar包&#xff1f;&#xff1f; &#xff08;1&#xff09;什么是Jar包&#xff1f; 定义&#xff1a; JAR 包&#xff08;Java Archive&#xff09; 是 Java 平台标准的归档文件格式&#xff0c;用于将多个 Jav…

算法-基础算法-递归算法(Python)

文章目录 前言递归和数学归纳法递归三步走递归的注意点避免栈溢出避免重复运算 题目斐波那契数反转链表 前言 递归&#xff08;Recursion&#xff09;&#xff1a;指的是一种通过重复将原问题分解为同类的子问题而解决的方法。在绝大数编程语言中&#xff0c;可以通过在函数中再…

TVFEMD-CPO-TCN-BiLSTM多输入单输出模型

47-TVFEMD-CPO-TCN-BiLSTM多输入单输出模型 适合单变量&#xff0c;多变量时间序列预测模型&#xff08;可改进&#xff0c;加入各种优化算法&#xff09; 时变滤波的经验模态分解TVFEMD时域卷积TCN双向长短期记忆网络BiLSTM时间序列预测模型 另外以及有 TCN-BILSTM …

深入浅出Node.js中间件机制

我们用一个实际的例子来看看中间件是如何运作的。假设我们有一个非常简单的Express应用&#xff0c;它只有两个中间件函数&#xff1a; const express require(express); const app express();app.use((req, res, next) > {console.log(第一个中间件);next(); });app.use…

Vue-15-前端框架Vue之应用基础编程式路由导航

文章目录 1 RouterLink的replace属性1.1 App.vue1.2 应用效果2 编程式路由导航2.1 场景一Home.vue2.2 场景二News.vue3 路由重定向3.1 index.ts3.2 Detail.vue3.3 About.vue1 RouterLink的replace属性 路由每次跳转都有记录,默认是push,可以改为replace。 RouterLink支持两…

android14 设置下连续点击5次Settings标题跳转到拨号界面

部分项目隐藏了拨号器&#xff0c;但开发者需要间距跳转到拨号界面 设置一级界面&#xff1a; packages/apps/Settings/src/com/android/settings/homepage/SettingsHomepageActivity.java 通过dispatchTouchEvent方法先获取Settings标题的区域X,Y数据。 import java.util.Set…

MP分页和连表常用写法

1. 分页查询 方案一&#xff1a;MyBatis XML MyBatis 内置的使用方式&#xff0c;步骤如下&#xff1a; ① 创建 AdminUserMapper.xml 文件&#xff0c;编写两个 SQL 查询语句&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE m…

使用 Spring AI Alibaba构建 AI Code Review 应用

很早的时候就想着用AI来做Code Review&#xff0c;最近也看到了一些不错的实现&#xff0c;但是没有一个使用Java来构建的&#xff0c;看的比较费劲&#xff0c;虽然说语言只是一种工具&#xff0c;但是还是想用Java重新写一遍&#xff0c;正好最近Spring AI Alibaba出了正式版…

力扣1590. 使数组和能被 P 整除

这一题的难点在于模运算&#xff0c;对模运算足够了解&#xff0c;对式子进行变换就很容易得到结果&#xff0c;本质上还是一道前缀和哈希表的题 这里重点讲一下模运算。 常见的模运算的用法 (a-b)%k0等价于 a%kb%k 而在这一题中由于多了一个len&#xff0c;&#xff08;数组的…

FPGA内部资源介绍

FPGA内部资源介绍 目录 逻辑资源块LUT&#xff08;查找表&#xff09;加法器寄存器MUX&#xff08;复用器&#xff09;时钟网络资源 全局时钟网络资源区域时钟网络资源IO时钟网络资源 时钟处理单元BLOCK RAMDSP布线资源接口资源 用户IO资源专用高速接口资源 总结 1. 逻辑资源…

CSS 列表

CSS 列表 引言 CSS 列表是网页设计中常用的一种布局方式&#xff0c;它能够帮助我们以更灵活、更美观的方式展示数据。本文将详细介绍 CSS 列表的创建、样式设置以及常用技巧&#xff0c;帮助您更好地掌握这一重要技能。 CSS 列表概述 CSS 列表主要包括两种类型&#xff1a…

spring中的@Cacheable缓存

1. 使用方法 在方法上面加上注解Cacheable&#xff0c; OverrideCacheable(cacheNames "userCache", key "#id")public User getUserById(Long id) {System.out.println("查询数据库了");return getById(id);}如果你的项目中引入了&#xff…