uni-app vue3项目,uni.scss 中 :export 导出的数据不是对象而是字符串

发布于 1周前 作者 gougou168 来自 Uni-App

uni-app vue3项目,uni.scss 中 :export 导出的数据不是对象而是字符串

开发环境 版本号 项目创建方式
Windows win10 HBuilderX

示例代码:

// uni.scss
/* 行为相关颜色 */
$uni-color-primary: #007aff;
:export{
test: $uni-color-primary;
}

// index.vue

import uniScss from “@/uni.scss”
console.log(uniScss)


## 操作步骤:

- 新建空白vue3项目


// uni.scss  
/* 行为相关颜色 */  
$uni-color-primary: #007aff;  
:export{  
    test: $uni-color-primary;  
}  

// index.vue  

import uniScss from "@/uni.scss"  
console.log(uniScss)

预期结果:

希望 uniScss 是对象

实际结果:

uniScss 返回的是字符串 :export {test: #007aff;} 现在返回的是两个一样的字符串了

:export {test: #007aff;}
:export {test: #007aff;}


9 回复

感谢反馈,我使用你提供的复现工程,打印看不到结果,没有直接复现你的问题,通过查阅相关问题,提供下面几个方案,信息来自 vite 官方提到的链接 https://github.com/vitejs/vite/issues/1279
你可以使用 css 变量来实现css 和 js 中使用。或者你可以按照 链接中提到的绕过方案,讲 .scss 改为 .module.scss 来实现 js 访问 scss 文件
经过测试,vue3 支持下面使用方式,可以正常打印结果。
main.js 文件: import uniScss from ‘./uni.module.scss’
console.log(uniScss)
console.log(uniScss.test) uni.moduel.scss 内容如下
:export {
test: #007aff;
} 我补充了演示工程,供你测试使用


改成 uni.module.scss之后,预设的所有 变量比如 $uni-color-primary: #007aff; 都不能用了,项目启动报错

回复 西恩十月: 啥报错,我试了试可以用,我补充个复现工程,你试试吧

回复 DCloud_UNI_OttoJi: 复现工程中,是在需要的style标签里面额外写 @import “@/uni.module.scss”; 如果是uni.scss的话,是不需要额外import的

没人吗?这个问题百分百复现

请问最后怎么实现的

回复 l***@163.com: 参考我的评论试一试

嗯,明白你的意思了,目前 vue2 和 vue3 有差异,vite 官方不会支持这个自动格式化的方案。uniapp 框架本身不会修改这个行为,他会破坏其他正常项目。
要解决你的问题,

你先使用我的提供方式,用 css modules
自己处理格式化 json。

我看 vue3 背后的 vite 是否还有绕过方案,通过 scss 添加自动导入等。

uni-app 项目中,uni.scss 文件通常用于定义全局的样式变量。uni.scss 文件中的 :export 语法用于将 SCSS 变量导出为 JavaScript 可用的对象。然而,如果你发现导出的数据是字符串而不是对象,可能是由于以下原因:

1. 语法错误

确保 :export 的语法正确。正确的语法应该是:

:export {
  variableName: $variableValue;
}

例如:

$primary-color: #007bff;

:export {
  primaryColor: $primary-color;
}

2. 变量类型

确保你导出的变量是有效的 SCSS 变量,而不是字符串。如果你直接导出一个字符串,它会被当作字符串处理。

例如,以下代码会导出一个字符串:

:export {
  primaryColor: "#007bff";
}

而以下代码会导出一个变量值:

$primary-color: #007bff;

:export {
  primaryColor: $primary-color;
}

3. 使用方式

在 JavaScript 中,你可以通过 import 来使用导出的变量。确保你在 JavaScript 中正确地解析了导出的数据。

例如:

import styles from '@/uni.scss';

console.log(styles.primaryColor); // 应该输出 #007bff

4. 检查构建工具

确保你的构建工具(如 webpackvite)正确配置了 SCSS 文件的解析。如果构建工具没有正确解析 :export,可能会导致导出的数据是字符串而不是对象。

5. 使用 sass-loader

如果你使用的是 webpack,确保你安装了 sass-loader 并且配置正确。sass-loader 负责将 SCSS 文件转换为 CSS,并处理 :export 语法。

示例代码

uni.scss 文件:

$primary-color: #007bff;

:export {
  primaryColor: $primary-color;
}

在 Vue 组件中使用:

<template>
  <div :style="{ color: primaryColor }">
    This text is colored with the primary color.
  </div>
</template>

<script>
import styles from '@/uni.scss';

export default {
  data() {
    return {
      primaryColor: styles.primaryColor,
    };
  },
};
</script>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!