在 uniapp 里面使用 unocss

1. 安装插件

npm i unocss @unocss/transformer-directives unocss-preset-weapp -D 这个里面加了个指令的使用, 可以根据自身需求来决定是否使用

2. uno.config.ts 配置。

按照这个配置基本可以解决你的问题。

import presetWeapp from 'unocss-preset-weapp'
import { extractorAttributify, transformerClass } from 'unocss-preset-weapp/transformer'
import { defineConfig } from 'unocss/vite'
import transformerDirectives from '@unocss/transformer-directives'const { presetWeappAttributify, transformerAttributify } = extractorAttributify()export default defineConfig({// @ts-expect-error 插件类型不匹配presets: [presetWeapp(), presetWeappAttributify()],transformers: [transformerDirectives({enforce: 'pre',}),// @ts-expect-error 插件类型不匹配transformerAttributify(),// @ts-expect-error 插件类型不匹配transformerClass(),],
})

如果你想使用 unocss 的指令一定要看下面的, 如果你可以确定不使用那就可以不看

你会遇到的问题:
在配置了指令之后, 大概率会在 h5 里面遇到 rpx 无法转换为 rem。

解决方法:
配置 transformerDirectives({ enforce: 'pre', }),

这是 vite 官方对这个字段的解释:
一个 Vite 插件可以额外指定一个 enforce 属性(类似于 webpack 加载器)来调整它的应用顺序。enforce 的值可以是pre 或 post。解析后的插件将按照以下顺序排列: vite文档地址

为什么要这样配置呢, 我们想一下, 在小程序里面使用的单位是 rpx, 在 h5 里面使用的是 rem, 为什么我们在使用 uniapp 的时候可以直接写 rpx, 因为 uniapp 的插件在内部处理了, 在编译小程序或者 h5 的时候是做了对应的处理的.

这个时候我们就要想一下为什么添加了指令之后 rpx 就无法被转换了为 rem 了呢, 因为 unocss 里面的 transformers 执行顺序是后置与 uniapp 插件的, 所以指令生成的 rpx 是无法被 uniapp 插件处理到的

我们来看import { extractorAttributify, transformerClass } from 'unocss-preset-weapp/transformer'这个插件的源码, 这个插件的 transformer 都配置了 enforce: 'pre', 以下是部分源码。 代码地址

 {name: 'transformer-weapp-class',idFilter,enforce: 'pre',transform(code, id) {let newCode = transformCode(code.toString(), options.transformRules)if (options.classTags) {const classNames = getClass(code.toString())const injectStr = Array.from(new Set(classNames.map(x => x[1]).filter(x => x).flatMap(x => x.split(' ')))).join(' ')if (vueFilter(id))newCode = newCode.replace('<template>', `<template>\n<!-- ${injectStr} -->\n`)elsenewCode = `/* ${injectStr} */\n${newCode}`}code.overwrite(0, code.original.length, newCode)},}

下面是我的 vite.config.ts, 这个文件基本不会影响到 unocss 的处理逻辑

import { resolve } from 'node:path'
import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
import AutoImport from 'unplugin-auto-import/vite'
import UnoCSS from 'unocss/vite'// import Components from 'unplugin-vue-components/vite'import Components from '@uni-helper/vite-plugin-uni-components'// https://vitejs.dev/config/
export default defineConfig({plugins: [UnoCSS(),AutoImport({imports: ['vue', 'pinia'],dts: './typing/auto-imports.d.ts',}),Components({dirs: ['src/components/', 'src/uni_modules/hex-ui/', 'src/uni_modules/z-paging/components/'],dts: './typing/components.d.ts',}),uni(),],resolve: {alias: {'@': resolve(__dirname, './src'),'@components': resolve(__dirname, './src/components/'),},},
})

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

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

相关文章

SpringCloudAlibaba——Sentinel

Sentinel也就是我们之前的Hystrix&#xff0c;而且比Hystrix功能更加的强大。Sentinel是分布式系统的流量防卫兵&#xff0c;以流量为切入点&#xff0c;从流量控制、流量路由、熔断降级等多个维度保护服务的稳定性。 Sentinel采用的是懒加载&#xff0c;这个接口被访问一次&a…

解决MySQL不能存储Emoji表情的问题

原因分析 在MySQL 5.5.3之前版本的数据库中&#xff0c;数据库的默认编码是utf8字符集&#xff0c;只支持1-3个字节的字符&#xff0c;也就是只能保存1到3个字节。但现在的emoji表情需要用4个字节才能保存&#xff0c;所以抛出异常。 解决方案 1、将数据表的编码格式设置成u…

react 实现chatGPT的打印机效果 兼容富文本,附git地址

1、方式一 &#xff1a;使用插件 typed.js typed.js 网站地址&#xff0c;点我打开 1.1、核心代码如下&#xff1a; //TypeWriteEffect/index.tsx 组件 import React, { useEffect, useRef } from react; import Typed from typed.js; import { PropsType } from ./index.d;…

React Router 中的 exact 属性

在看 React 示例时&#xff0c;发现在配置路由时很多都用到了 exact 属性&#xff0c;然后就研究了一下。 在 React Router 中&#xff0c;exact 是一个布尔属性&#xff0c;用于确保路由路径的精确匹配。 示例 import { BrowserRouter as Router, Route, Switch } from rea…

算法进阶指南图论 道路与航线

其实再次看这题的时候。想法就是和强连通分量有关&#xff0c;我们很容易发现&#xff0c;题目中所说的双向边&#xff0c;就构成了一个强连通分量&#xff0c;而所谓的单向边&#xff0c;则相当于把强连通分量进行缩点&#xff0c;然后整个图成为了一个DAG&#xff0c;众所周知…

MongoDB副本集特点验证

MongoDB副本集特点验证 mogodb副本集概述副本集搭建副本集结构验证结果源码地址 mogodb副本集概述 MongoDB副本集是将数据同步在多个服务器的过程。 复制提供了数据的冗余备份&#xff0c;并在多个服务器上存储数据副本&#xff0c;提高了数据的可用性&#xff0c; 并可以保证…

2022ICPC济南站

K Stack Sort 题意&#xff1a;给你一个长度为n的排列&#xff0c;设有m个栈&#xff0c;你需要将这n个数按出现顺序入栈&#xff0c;每次入栈操作从m个栈中选择一个栈从栈顶入栈。当所有元素入栈完成后&#xff0c;需要不断选择栈&#xff0c;将栈中元素弹空。需满足出栈顺序…

day53 django的三板斧与配置模块

昨日内容回顾 web应用程序 主要是因为接下来学习的Django框架主要就是用来开发web应用的 ​ web应用它是一款B/S架构的软件&#xff0c;只需要一个浏览器作为我们的客户端&#xff0c;我们自己写个服务端就行了 # 它的优点 1. 它只需要一个浏览器即可&#xff0c;无需安装其他…

单向循环代码实现cpp

// 单向循环链表 class CircleLink { public:CircleLink(){head_ new Node();tail_ head_;head_->next_ head_;}~CircleLink(){Node* p head_->next_;while (p ! head_){head_->next_ p->next_;delete p;p head_->next_;}delete head_;}public:// 尾插法 …

【不正经操作】百度深度学习框架paddlepaddle本地运行-Python环境配置笔记

百度深度学习框架PaddlePaddle 百度深度学习框架PaddlePaddle是一个支持深度学习和机器学习的开源框架。它由百度公司于2016年开发并发布&#xff0c;现在已经成为中国最受欢迎的深度学习框架之一&#xff0c;并且在国际上也获得了不少关注。 特点与功能 易于使用 PaddlePa…

ARMday01(计算机理论、ARM理论)

计算机理论 计算机组成 输入设备、输出设备、运算器、控制器、存储器 1.输入设备&#xff1a;将编写好的软件代码以及相关的数据输送到计算机中&#xff0c;转换成计算机能够识别、处理和存储的数据形式 键盘、鼠标、手柄、扫描仪、 2.输出设备&#xff1a;将计算机处理好的数…

百文买鸡和水仙花数问题(C#解法)

百文买鸡题目&#xff1a; ⽤100⽂买⼀百只鸡&#xff0c;其中公鸡&#xff0c;⺟鸡&#xff0c;⼩鸡&#xff0c;都必须要有&#xff0c;公鸡3⽂⼀只&#xff0c;⺟鸡5⽂⼀只&#xff0c;⼩鸡2⽂⼀只&#xff0c;请问公鸡、⺟鸡、⼩鸡要买多少只刚好凑⾜100⽂。 // x y z 公鸡…

解决 github.com 或者 raw.githubusercontent.com 打开慢、打不开问题

系列文章目录 文章目录 系列文章目录前言一、Windows 系统1.1 以管理员身份运行记事本1.2 打开 hosts 文件1.3 写入 IP 地址 二、Linux2.1 hosts 文件位置 三、Android 系统总结 前言 连接手机热点&#xff0c;将流量关闭马上打开&#xff0c;进入的成功率更高 一、Windows 系…

Netty入门指南之NIO 粘包与半包

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言问题产…

NOIP2023模拟13联测34 abstract

题目大意 有一棵有 n n n个点的树&#xff0c;每个点有一个点权 a i a_i ai​&#xff0c; f ( i , j ) f(i,j) f(i,j)和 g ( i , j ) g(i,j) g(i,j)分别表示 i i i到 j j j的路径上的权值与和权值或&#xff0c;求 ∑ i 1 n ∑ j i n f ( i , j ) g ( i , j ) \sum\limits_…

flutter开发实战-TweenSequence实现动画序列

flutter开发实战-TweenSequence实现动画序列 一、TweenSequence TweenSequence是允许创建一个Animation由一系列补间动画来确定值&#xff0c;每个TweenSequenceItem都有定义在动画的持续时间的权重确定动画间隔。 TweenSequence 动画组类TweenSequenceItem 用来定义每一个动…

深度学习读取txt训练数据绘制参数曲线图的方法

有一些深度学习模型是并不像yolo系列那样最终输出相应的参数图&#xff0c;有很多训练形成了一个训练log文件&#xff0c;于是需要读取log文件中的内容并绘制成曲线图。 如下实例&#xff0c;有一个log文件的部分截图&#xff0c;需要将其读取出来并绘制曲线图 废话不多说&…

前端之Bootstrap框架

目录 【一】Bootstrap介绍 【二】Bootstrap引入 【1】CDN加速链接 【2】注意 【三】布局容器 【四】栅格系统 【五】栅格参数 【六】列偏移 【七】排版 标题 内联文本元素 对齐 改变大小写 引用 列表 【八】表格 基本实例 条纹状表格 带边框的表格 鼠标悬停…

汽车工业生产线数字孪生可视化管理平台,赋予工厂车间数字化智慧化管理

在工业4.0 的时代背景下&#xff0c;随着企业数字化进程的推进&#xff0c;数字孪生可视化技术逐渐在汽车行业得到广泛应用&#xff0c;数字孪生智慧工厂的建设也成为了汽车行业数字化转型的趋势之一。汽车制造业属于典型的离散制造行业&#xff0c;汽车生产包含冲压、焊接、涂…

19.13 Boost Asio 发送TCP流数据

Boost框架中默认就提供了针对TCP流传输的支持&#xff0c;该功能可以用来进行基于文本协议的通信&#xff0c;也可以用来实现自定义的协议。一般tcp::iostream会阻塞当前线程&#xff0c;直到IO操作完成。 首先来看服务端代码&#xff0c;如下所示在代码中首先通过GetFileSize…