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

问题

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

背景:

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

css 复制代码
/* 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'

于是!成功解决了问题。

相关推荐
Moonnnn.28 分钟前
【单片机期末】串行口循环缓冲区发送
笔记·单片机·嵌入式硬件·学习
互联网搬砖老肖41 分钟前
Web 架构之 CDN 加速原理与落地实践
前端·架构
会飞的鱼先生42 分钟前
javascript中Cookie、BOM、DOM的使用
前端·javascript·chrome
OpenTiny社区1 小时前
开源之夏·西安电子科技大学站精彩回顾:OpenTiny开源技术下沉校园,点燃高校开发者技术热情
前端·开源
多多*1 小时前
基于rpc框架Dubbo实现的微服务转发实战
java·开发语言·前端·redis·职场和发展·蓝桥杯·safari
灏瀚星空1 小时前
用HTML5 Canvas打造交互式心形粒子动画:从基础到优化实战
前端·html·html5
Jackson__1 小时前
聊一下HTTP 与 HTTPS 的区别,以及HTTPS 的加密方式
前端·面试
fen_fen1 小时前
学习笔记(26):线性代数-张量的降维求和,简单示例
笔记·学习·算法
一抓掉一大把1 小时前
MiniExcel模板填充Excel导出
开发语言·javascript·ecmascript
好运yoo2 小时前
npm install的原理
前端·npm