【踩坑】TypeScript 中使用 sass 动态设置样式

ops/2024/11/12 13:24:41/

问题

        在从 Vue2 项目转向 Vue3 项目时,不得不将已经封装好的 echarts 图表也升级成 Vue3 适配的版本,遇到了一个有些诡异的问题,在此记录一下。

背景:

      在 Vue2 的项目中,为了动态设置 echarts 的相关配置,于是有这样一个文件:

/* echart theme 主题颜色 字体等 */
$theme:#999999;
//统计图主题色系,主题色系修改,此处应相应修改
$lengendColors:"#409eff","#e6a23c","#67c23a","#d87c7c","#22e4b5","#b6a2de","#e4bc20","#d95850","#74B5F9";
$chartPrimary:rgba(255, 255, 255, 1);
$chartfontSize:12px;
$fontColor:#000000;
$markLineColor:yellow;
$platformColor:#67c23a; //平台类
$projectColor:#e6a23c;  //项目类
$standardColor:#0098d9; //标准工时
$declarationColor:#b6a2de; //申报工时
$chartHeight: 300px;$success: #67C23A;
$warning: #E6A23C;
$danger: #ED1731;
$info: #909399;:export {theme:$theme;lengendColors:$lengendColors;chartPrimary: $chartPrimary;chartfontSize:$chartfontSize;fontColor:$fontColor;markLineColor:$markLineColor;platformColor:$platformColor;projectColor:$projectColor;standardColor:$standardColor;declarationColor:$declarationColor;chartHeight: $chartHeight;
}

        本来,我们是可以正常使用的,跑得动,也可以正常打包发布。按照以下方式使用:

javascript">import echart from '../theme/theme.scss'

报错  

      现在,新开了一个 Vue3 项目,在封装 echarts 图表时,依然用了旧项目的那套代码,跑起来一切正常!!!但是呢,一旦打包就会报错!!!报错信息如下:

原因 

      出现这个错误的原因是,我们在 TypeScript 文件中尝试从 .scss 文件中导入内容,但 TypeScript 并不支持直接从 .scss 文件中导入变量或样式。.scss 文件是用于定义 CSS 样式和变量,而 TypeScript 主要用于定义 JavaScript 的类型和逻辑。

解决方法

        可以将 SCSS 变量转换为一个 JavaScript 对象,并在 TypeScript 文件中导入这个对象。这通常需要在构建过程中使用一个工具来提取 SCSS 变量并将其转换为 JavaScript。

        例如,可以创建一个 JSON 文件(或 TypeScript 文件),其中包含了所有的样式变量:

javascript">{  "theme": "#999999",  "lengendColors": ["#409eff", "#e6a23c", "#67c23a", "#d87c7c", "#22e4b5", "#b6a2de", "#e4bc20", "#d95850", "#74B5F9"],  "chartPrimary": "rgba(255, 255, 255, 1)",  "chartfontSize": "12px",  "fontColor": "#000000",  "markLineColor": "yellow",  "platformColor": "#67c23a",  "projectColor": "#e6a23c",  "standardColor": "#0098d9",  "declarationColor": "#b6a2de",  "chartHeight": "300px",  "success": "#67C23A",  "warning": "#E6A23C",  "danger": "#ED1731",  "info": "#909399"  
}

        然后在 TypeScript 文件中导入这个 JSON 文件:

javascript">import echart from '../theme/theme.json'

        于是!成功解决了问题。 


http://www.ppmy.cn/ops/93295.html

相关文章

http参数污染利用php小特性绕过贷齐乐waf

目录 分析源码 php的特性 php另外一个特性 实现注入 联合查询注入 爆库 爆表名 爆列名 爆出flag 分析源码 GET/POST/REQUEST/COOKIE都会经过这个替换str_ace(array(&, ", <, >,(,)), array(&, ", <, >,&#xff08;,&#xff09;), $st…

TRP00F (剥皮机) 自动化权限提升工具

TRP00F 项目地址:https://github.com/MartinxMax/trp00f TRP00F 是一个完全自动化的 Linux 权限提升工具。被控制的端点通过反向 Shell 连接到权限提升机器&#xff0c;而权限提升机器将自动将权限提升到指定的攻击者机器。 TRP00F 是一个活跃维护和更新的工具&#xff0c;随…

C++新特性-智能指针

std::weak_ptr std::weak_ptr是一种弱引用&#xff0c;它不能单独使用&#xff0c;设计之初是为了配合std::shared_ptr&#xff0c;解决后者设计上存在的问题。 使用注意&#xff1a; 不能直接指向原始指针:std::weak_ptr<int> wp (new int);只能指向std::shared_ptr对象…

系统架构师案例分析题的解题技巧

1. 仔细阅读题目 确保理解题目所描述的系统背景、需求和问题。标注关键信息&#xff0c;如系统的规模、业务特点、性能要求等。 2. 明确问题类型 判断是关于架构设计原则、质量属性优化、技术选型还是其他方面的问题。例如&#xff0c;如果是关于性能优化的问题&#xff0c;要重…

MySQL 存储引擎之MyISAM

MyISAM 是 MySQL 中的一个存储引擎&#xff0c;它在 MySQL 的早期版本中非常流行&#xff0c;并且在某些特定的应用场景下仍然有其独特的优势。 MyISAM 存储引擎特点&#xff1a; 不支持事务&#xff1a;这意味着一旦发生崩溃&#xff0c;恢复过程可能比较复杂。表锁&#xff…

部分性能探索

函数节流 函数节流是指在一定时间内只执行一次函数&#xff0c;比如鼠标滚动事件&#xff0c;如果没有限制&#xff0c;那么每次鼠标滚动都会触发大量事件&#xff0c;导致浏览器卡顿甚至崩溃&#xff0c;而通过函数节流可以使得事件执行稳定流畅。 function throttle(fn, wai…

同构字符串

给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符的顺序。不同字符不能映射到同一个字符上&#xff0c;相…

Django中的Q对象

文章目录 Django中的Q对象三种使用方式Q对象中常用的属性或方法 Django中的Q对象 from django.db.models import Q在Django框架中&#xff0c;Q 对象是 django.db.models.Q 的一个实例&#xff0c;它用于创建复杂的查询表达式。 Q 对象允许你构建包含多个条件的查询&#xff0c…