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 = ` + +`; + + 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 = ` - -`; - - 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"