From 457dc4d11727d938d0e9f4c402b4e8945425cc0e Mon Sep 17 00:00:00 2001
From: icssoa <615206459@qq.com>
Date: Mon, 30 Jun 2025 20:07:44 +0800
Subject: [PATCH] 1
---
packages/vite-plugin/dist/index.js | 16 ++--
packages/vite-plugin/dist/test.d.ts | 1 +
.../vite-plugin/dist/uniapp-x/tailwind.d.ts | 4 +
packages/vite-plugin/dist/uniapp-x/utils.d.ts | 1 -
packages/vite-plugin/package.json | 1 +
packages/vite-plugin/src/test.ts | 90 +++++++++++++++++++
packages/vite-plugin/src/uniapp-x/tailwind.ts | 16 +++-
packages/vite-plugin/src/uniapp-x/utils.ts | 83 +----------------
packages/vite-plugin/yarn.lock | 5 ++
9 files changed, 124 insertions(+), 93 deletions(-)
create mode 100644 packages/vite-plugin/dist/test.d.ts
create mode 100644 packages/vite-plugin/src/test.ts
diff --git a/packages/vite-plugin/dist/index.js b/packages/vite-plugin/dist/index.js
index c4645fe..1735595 100644
--- a/packages/vite-plugin/dist/index.js
+++ b/packages/vite-plugin/dist/index.js
@@ -657,7 +657,7 @@
"disabled:",
"group-hover:",
];
- const statePrefixes = ["dark:", "light:", "sm:", "md:", "lg:", "xl:", "2xl:"];
+ const statePrefixes = ["dark:", "dark:!", "light:", "sm:", "md:", "lg:", "xl:", "2xl:"];
if (className.startsWith("!") && !className.includes("!=")) {
return true;
}
@@ -687,8 +687,6 @@
return `type ${name}${extendsStr} = {${content}}`;
});
}
- // test();
- // npx tsx src/uniapp-x/utils.ts
// 全局 service 对象,用于存储服务结构
const service = {};
@@ -1934,6 +1932,10 @@ if (typeof window !== 'undefined') {
decl.value = "1";
}
}
+ // 处理 vertical-align 属性
+ if (decl.prop == "vertical-align") {
+ decl.remove();
+ }
// 处理 visibility 属性
if (decl.prop == "visibility") {
decl.remove();
@@ -1953,9 +1955,11 @@ if (typeof window !== 'undefined') {
// 处理单位转换(rem -> rpx)
if (node.type === "word") {
const unit = valueParser.unit(node.value);
- if (unit?.unit === "rem") {
- node.value = remToRpx(unit.number);
- hasChanges = true;
+ if (typeof unit != "boolean") {
+ if (unit?.unit === "rem") {
+ node.value = remToRpx(unit.number);
+ hasChanges = true;
+ }
}
}
// 处理 CSS 变量
diff --git a/packages/vite-plugin/dist/test.d.ts b/packages/vite-plugin/dist/test.d.ts
new file mode 100644
index 0000000..6764a10
--- /dev/null
+++ b/packages/vite-plugin/dist/test.d.ts
@@ -0,0 +1 @@
+export declare function test(): void;
diff --git a/packages/vite-plugin/dist/uniapp-x/tailwind.d.ts b/packages/vite-plugin/dist/uniapp-x/tailwind.d.ts
index 2f9c48e..37c18bf 100644
--- a/packages/vite-plugin/dist/uniapp-x/tailwind.d.ts
+++ b/packages/vite-plugin/dist/uniapp-x/tailwind.d.ts
@@ -1,4 +1,8 @@
import type { Plugin } from "vite";
+/**
+ * 转换类名中的特殊字符为安全字符
+ */
+export declare function toSafeClass(className: string): string;
/**
* Tailwind 类名转换插件
*/
diff --git a/packages/vite-plugin/dist/uniapp-x/utils.d.ts b/packages/vite-plugin/dist/uniapp-x/utils.d.ts
index c7c841b..93f1538 100644
--- a/packages/vite-plugin/dist/uniapp-x/utils.d.ts
+++ b/packages/vite-plugin/dist/uniapp-x/utils.d.ts
@@ -26,4 +26,3 @@ export declare function isTailwindClass(className: string): boolean;
* 将 interface 转换为 type
*/
export declare function interfaceToType(code: string): string;
-export declare function test(): void;
diff --git a/packages/vite-plugin/package.json b/packages/vite-plugin/package.json
index 5e43883..081fad3 100644
--- a/packages/vite-plugin/package.json
+++ b/packages/vite-plugin/package.json
@@ -23,6 +23,7 @@
"@typescript-eslint/eslint-plugin": "^7.7.1",
"@typescript-eslint/parser": "^7.7.1",
"eslint": "^9.1.1",
+ "postcss-value-parser": "^4.2.0",
"rollup": "^4.16.2",
"tslib": "^2.6.2",
"typescript": "^5.4.5",
diff --git a/packages/vite-plugin/src/test.ts b/packages/vite-plugin/src/test.ts
new file mode 100644
index 0000000..fe04544
--- /dev/null
+++ b/packages/vite-plugin/src/test.ts
@@ -0,0 +1,90 @@
+import { toSafeClass } from "./uniapp-x/tailwind";
+import { getClassContent, getClassNames, getNodes, isTailwindClass } from "./uniapp-x/utils";
+
+export function test() {
+ const html = `
+
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+
+ 17
+
+`;
+
+ const nodes = getNodes(html);
+
+ console.log("所有节点:");
+ nodes.forEach((node, index) => {
+ console.log(`第${index + 1}个节点:`, node);
+ });
+
+ console.log("\n详细分析:");
+ nodes.forEach((node, index) => {
+ const classContents = getClassContent(node);
+ const classNames = getClassNames(node);
+ console.log(`第${index + 1}个节点:`);
+ console.log("classContents", classContents);
+ console.log("classNames", classNames);
+
+ classNames.forEach((className) => {
+ console.log("safeClass", toSafeClass(className));
+ });
+ console.log("---");
+ });
+
+ console.log(isTailwindClass("dark:!text-surface-50"));
+}
+
+test();
+
+// npx tsx src/test.ts
diff --git a/packages/vite-plugin/src/uniapp-x/tailwind.ts b/packages/vite-plugin/src/uniapp-x/tailwind.ts
index 5575e6b..20d9113 100644
--- a/packages/vite-plugin/src/uniapp-x/tailwind.ts
+++ b/packages/vite-plugin/src/uniapp-x/tailwind.ts
@@ -29,7 +29,7 @@ const TW_DEFAULT_VALUES: Record = {
/**
* 转换类名中的特殊字符为安全字符
*/
-function toSafeClass(className: string): string {
+export function toSafeClass(className: string): string {
if (className.includes(":host")) {
return className;
}
@@ -179,6 +179,11 @@ function postcssPlugin(): Plugin {
}
}
+ // 处理 vertical-align 属性
+ if (decl.prop == "vertical-align") {
+ decl.remove();
+ }
+
// 处理 visibility 属性
if (decl.prop == "visibility") {
decl.remove();
@@ -203,9 +208,12 @@ function postcssPlugin(): Plugin {
// 处理单位转换(rem -> rpx)
if (node.type === "word") {
const unit = valueParser.unit(node.value);
- if (unit?.unit === "rem") {
- node.value = remToRpx(unit.number);
- hasChanges = true;
+
+ if (typeof unit != "boolean") {
+ if (unit?.unit === "rem") {
+ node.value = remToRpx(unit.number);
+ hasChanges = true;
+ }
}
}
diff --git a/packages/vite-plugin/src/uniapp-x/utils.ts b/packages/vite-plugin/src/uniapp-x/utils.ts
index 1d83e68..5aafc4c 100644
--- a/packages/vite-plugin/src/uniapp-x/utils.ts
+++ b/packages/vite-plugin/src/uniapp-x/utils.ts
@@ -485,7 +485,7 @@ export function isTailwindClass(className: string): boolean {
"group-hover:",
];
- const statePrefixes = ["dark:", "light:", "sm:", "md:", "lg:", "xl:", "2xl:"];
+ const statePrefixes = ["dark:", "dark:!", "light:", "sm:", "md:", "lg:", "xl:", "2xl:"];
if (className.startsWith("!") && !className.includes("!=")) {
return true;
@@ -522,84 +522,3 @@ export function interfaceToType(code: string) {
return `type ${name}${extendsStr} = {${content}}`;
});
}
-
-export function test() {
- const html = `
-
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
-
-
-`;
-
- const nodes = getNodes(html);
-
- console.log("所有节点:");
- nodes.forEach((node, index) => {
- console.log(`第${index + 1}个节点:`, node);
- });
-
- console.log("\n详细分析:");
- nodes.forEach((node, index) => {
- const classContents = getClassContent(node);
- const classNames = getClassNames(node);
- console.log(`第${index + 1}个节点:`);
- console.log("classContents", classContents);
- console.log("classNames", classNames);
- console.log("---");
- });
-}
-
-// test();
-
-// npx tsx src/uniapp-x/utils.ts
diff --git a/packages/vite-plugin/yarn.lock b/packages/vite-plugin/yarn.lock
index 46631b5..0b0a851 100644
--- a/packages/vite-plugin/yarn.lock
+++ b/packages/vite-plugin/yarn.lock
@@ -1479,6 +1479,11 @@ picomatch@^4.0.2:
resolved "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab"
integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
+postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
postcss@^8.4.43, postcss@^8.5.3:
version "8.5.3"
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb"