From c57eaf74eda3bcc2c26f687b36d7e3ed3acf303a Mon Sep 17 00:00:00 2001
From: baiwusanyu-c <740132583@qq.com>
Date: Fri, 31 Mar 2023 18:07:47 +0800
Subject: [PATCH 1/2] chore: temp commit
---
play/src/App.vue | 51 ++++++++++++++++-
play/src/assets/scss/mixin.scss | 66 ++++++++++++++++++++++
play/src/assets/scss/variables.module.scss | 66 ++++++++++++++++++++++
play/vite.config.ts | 2 +-
4 files changed, 181 insertions(+), 4 deletions(-)
create mode 100644 play/src/assets/scss/mixin.scss
create mode 100644 play/src/assets/scss/variables.module.scss
diff --git a/play/src/App.vue b/play/src/App.vue
index 3173665..4be97c4 100644
--- a/play/src/App.vue
+++ b/play/src/App.vue
@@ -78,13 +78,58 @@ export default defineComponent({
-
diff --git a/play/src/assets/scss/mixin.scss b/play/src/assets/scss/mixin.scss
new file mode 100644
index 0000000..06fa061
--- /dev/null
+++ b/play/src/assets/scss/mixin.scss
@@ -0,0 +1,66 @@
+@mixin clearfix {
+ &:after {
+ content: "";
+ display: table;
+ clear: both;
+ }
+}
+
+@mixin scrollBar {
+ &::-webkit-scrollbar-track-piece {
+ background: #d3dce6;
+ }
+
+ &::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #99a9bf;
+ border-radius: 20px;
+ }
+}
+
+@mixin relative {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
+
+@mixin pct($pct) {
+ width: #{$pct};
+ position: relative;
+ margin: 0 auto;
+}
+
+@mixin triangle($width, $height, $color, $direction) {
+ $width: $width/2;
+ $color-border-style: $height solid $color;
+ $transparent-border-style: $width solid transparent;
+ height: 0;
+ width: 0;
+
+ @if $direction==up {
+ border-bottom: $color-border-style;
+ border-left: $transparent-border-style;
+ border-right: $transparent-border-style;
+ }
+
+ @else if $direction==right {
+ border-left: $color-border-style;
+ border-top: $transparent-border-style;
+ border-bottom: $transparent-border-style;
+ }
+
+ @else if $direction==down {
+ border-top: $color-border-style;
+ border-left: $transparent-border-style;
+ border-right: $transparent-border-style;
+ }
+
+ @else if $direction==left {
+ border-right: $color-border-style;
+ border-top: $transparent-border-style;
+ border-bottom: $transparent-border-style;
+ }
+}
diff --git a/play/src/assets/scss/variables.module.scss b/play/src/assets/scss/variables.module.scss
new file mode 100644
index 0000000..81a1917
--- /dev/null
+++ b/play/src/assets/scss/variables.module.scss
@@ -0,0 +1,66 @@
+// base color
+$blue: #324157;
+$light-blue: #3A71A8;
+$red: #C03639;
+$pink: #E65D6E;
+$green: #30B08F;
+$tiffany: #4AB7BD;
+$yellow: #FEC171;
+$panGreen: #30B08F;
+
+// 默认菜单主题风格
+$base-menu-color: #bfcbd9;
+$base-menu-color-active: #f4f4f5;
+$base-menu-background: #304156;
+$base-logo-title-color: #ffffff;
+
+$base-menu-light-color: rgba(0, 0, 0, 0.7);
+$base-menu-light-background: #ffffff;
+$base-logo-light-title-color: #001529;
+
+$base-sub-menu-background: #1f2d3d;
+$base-sub-menu-hover: #001528;
+
+// 自定义暗色菜单风格
+/**
+$base-menu-color:hsla(0,0%,100%,.65);
+$base-menu-color-active:#fff;
+$base-menu-background:#001529;
+$base-logo-title-color: #ffffff;
+
+$base-menu-light-color:rgba(0,0,0,.70);
+$base-menu-light-background:#ffffff;
+$base-logo-light-title-color: #001529;
+
+$base-sub-menu-background:#000c17;
+$base-sub-menu-hover:#001528;
+*/
+
+$--color-primary: #409EFF;
+$--color-success: #67C23A;
+$--color-warning: #E6A23C;
+$--color-danger: #F56C6C;
+$--color-info: #909399;
+$--color-placeholder: #a8abb2;
+$base-sidebar-width: 200px;
+
+// the :export directive is the magic sauce for webpack
+// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
+:export {
+ menuColor: $base-menu-color;
+ menuLightColor: $base-menu-light-color;
+ menuColorActive: $base-menu-color-active;
+ menuBackground: $base-menu-background;
+ menuLightBackground: $base-menu-light-background;
+ subMenuBackground: $base-sub-menu-background;
+ subMenuHover: $base-sub-menu-hover;
+ sideBarWidth: $base-sidebar-width;
+ logoTitleColor: $base-logo-title-color;
+ logoLightTitleColor: #0E53C4;
+ primaryColor: $--color-primary;
+ successColor: $--color-success;
+ dangerColor: $--color-danger;
+ infoColor: $--color-info;
+ warningColor: $--color-warning;
+ placeholderColor : $--color-placeholder;
+}
diff --git a/play/vite.config.ts b/play/vite.config.ts
index d5d50ba..a887401 100644
--- a/play/vite.config.ts
+++ b/play/vite.config.ts
@@ -29,7 +29,7 @@ export default defineConfig({
viteVueCSSVars({
include: [/.vue/],
includeCompile: ['**/**.scss'],
- server: true,
+ server: false,
}),
],
})
From 2dbd5757b302621b7399a598f38f4e605900ead1 Mon Sep 17 00:00:00 2001
From: baiwusanyu-c <740132583@qq.com>
Date: Fri, 31 Mar 2023 19:15:09 +0800
Subject: [PATCH 2/2] fix: Modify the injection strategy in build mode to avoid
error reporting
---
.../__snapshots__/inject-css.spec.ts.snap | 20 +++++++------------
packages/core/inject/inject-css.ts | 20 ++++++++++++-------
.../__snapshots__/process-css.spec.ts.snap | 1 +
packages/core/runtime/process-css.ts | 5 +++--
play/src/App.vue | 1 -
5 files changed, 24 insertions(+), 23 deletions(-)
diff --git a/packages/core/inject/__test__/__snapshots__/inject-css.spec.ts.snap b/packages/core/inject/__test__/__snapshots__/inject-css.spec.ts.snap
index 36b3215..2a36b52 100644
--- a/packages/core/inject/__test__/__snapshots__/inject-css.spec.ts.snap
+++ b/packages/core/inject/__test__/__snapshots__/inject-css.spec.ts.snap
@@ -2,37 +2,31 @@
exports[`inject-css > injectCssOnBuild: basic 1`] = `
"
-
-
-"
+ "
`;
exports[`inject-css > injectCssOnBuild: no lang 1`] = `
"
-
-
-"
+ "
`;
exports[`inject-css > injectCssOnBuild: no styles 1`] = `
"test
-
-"
+ "
`;
diff --git a/packages/core/inject/inject-css.ts b/packages/core/inject/inject-css.ts
index 49881db..ebc6208 100644
--- a/packages/core/inject/inject-css.ts
+++ b/packages/core/inject/inject-css.ts
@@ -1,5 +1,6 @@
import { transformInjectCSS } from '../transform/transform-inject-css'
import { parseImports } from '../parser'
+import type { TInjectCSSContent } from '../runtime/process-css'
import type { SFCDescriptor } from '@vue/compiler-sfc'
import type { TMatchVariable } from '../parser'
@@ -15,18 +16,23 @@ export function injectCssOnServer(
export function injectCssOnBuild(
code: string,
- injectCSSContent: Set<{ content: string, lang: string }>,
+ injectCSSContent: TInjectCSSContent,
descriptor: SFCDescriptor) {
const cssContent = [...injectCSSContent]
let resCode = ''
- descriptor.styles && descriptor.styles.forEach((value) => {
- resCode = `${resCode}\n`
- })
- cssContent.forEach((value) => {
- resCode = `${resCode}\n`
+
+ descriptor.styles && descriptor.styles.forEach((value, index) => {
+ let injectCssCode = ''
+ cssContent.forEach((value) => {
+ if (value.styleTagIndex === index)
+ injectCssCode = `${injectCssCode}\n${transformInjectCSS(value.content, parseImports(value.content).imports)}`
+ })
+ const lang = value.lang || 'css'
+ const scoped = value.scoped ? 'scoped' : ''
+ resCode = ``
})
code = removeStyleTagsAndContent(code)
- return `${code}\n${resCode}`
+ return `${code}\n ${resCode}`
}
export function removeStyleTagsAndContent(html: string): string {
diff --git a/packages/core/runtime/__test__/__snapshots__/process-css.spec.ts.snap b/packages/core/runtime/__test__/__snapshots__/process-css.spec.ts.snap
index 5d369e4..4a323a1 100644
--- a/packages/core/runtime/__test__/__snapshots__/process-css.spec.ts.snap
+++ b/packages/core/runtime/__test__/__snapshots__/process-css.spec.ts.snap
@@ -25,6 +25,7 @@ exports[`process css > getVBindVariableListByPath: basic 1`] = `
{
"content": "content foo color",
"lang": "scss",
+ "styleTagIndex": 0,
},
},
"vbindVariableListByPath": [
diff --git a/packages/core/runtime/process-css.ts b/packages/core/runtime/process-css.ts
index ee2343a..f6bb7e1 100644
--- a/packages/core/runtime/process-css.ts
+++ b/packages/core/runtime/process-css.ts
@@ -32,13 +32,14 @@ export const getCSSFileRecursion = (
* @param server
*/
// TODO: unit test
+export type TInjectCSSContent = Set<{ content: string, lang: string, styleTagIndex: number }>
export const getVBindVariableListByPath = (
descriptor: SFCDescriptor,
id: string,
cssFiles: ICSSFileMap,
server: boolean) => {
const vbindVariable: Set = new Set()
- const injectCSSContent = new Set<{ content: string, lang: string }>()
+ const injectCSSContent: TInjectCSSContent = new Set()
// 遍历 sfc 的 style 标签内容
for (let i = 0; i < descriptor.styles.length; i++) {
const content = descriptor.styles[i].content
@@ -57,7 +58,7 @@ export const getVBindVariableListByPath = (
// 根据 @import 信息,从 cssFiles 中,递归的获取所有在预处理时生成的 cssvars 样式
getCSSFileRecursion(key, cssFiles, (res: ICSSFile) => {
if (res.vBindCode) {
- !server && injectCSSContent.add({ content: res.content, lang: res.lang })
+ !server && injectCSSContent.add({ content: res.content, lang: res.lang, styleTagIndex: i })
res.vBindCode.forEach((vb) => {
vbindVariable.add(vb)
})
diff --git a/play/src/App.vue b/play/src/App.vue
index 4be97c4..34a29c4 100644
--- a/play/src/App.vue
+++ b/play/src/App.vue
@@ -131,5 +131,4 @@ export default defineComponent({
.mobile .fixed-header {
width: 100%;
}
-