问题
在从 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'
于是!成功解决了问题。