1***@qq.com
1***@qq.com
  • 发布:2025-03-13 11:32
  • 更新:2025-04-10 10:09
  • 阅读:1786

【报Bug】vue2 使用@use 'sass:math';报错

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10 10.0.19045

HBuilderX类型: 正式

HBuilderX版本号: 4.56

浏览器平台: Chrome

浏览器版本: 134

项目创建方式: HBuilderX

示例代码:
<style lang="scss" scoped>  
@use 'sass:math';  
$cell-spacing: 20rpx;  
.content {  
  padding: math.div($cell-spacing, 2);  
}  
</style>

操作步骤:

运行H5和小程序调试均报错

预期结果:

运行H5和小程序调试均报错

实际结果:

运行H5和小程序调试均报错

bug描述:

vue2在vue文件的style标签里使用 @use 'sass:math'; 会报错,vue3可以正常使用

11:13:51.684 Module build failed (from ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/sass-loader/dist/cjs.js):  
11:13:51.684 SassError: @use rules must be written before any other rules.  
11:13:51.684    ╷  
11:13:51.684 74 │ @use 'sass:math';  
11:13:51.684    │ ^^^^^^^^^^^^^^^^  
11:13:51.684    ╵  
11:13:51.684   *******\pages\index\index.vue 74:1  root stylesheet
2025-03-13 11:32 负责人:无 分享
已邀请:

最佳回复

DCloud

DCloud

HBuilderX 4.61.2025040322-alpha 已修复。

x***@sina.com

x***@sina.com

我也碰到了, @use 'sass:math'; 放在哪都不行, 不知道什么情况;

DCloud_UNI_HT

DCloud_UNI_HT

现在在 vue 页面内使用 @use ‘sass:math’ 确实有些问题,后续会排查修复,暂时绕过方案,你可以在项目根目录下的 uni.scss 中声明全局变量使用:

// uni.scss  
@use 'sass:math';    
$cell-spacing: 20rpx;    
$padding: math.div($cell-spacing, 2); 

页面内:

// index.vue  
<style lang="scss" scoped>    

.content {    
  padding: $padding;    
}    
</style>
3***@qq.com

3***@qq.com

vue2项目,@use 'sass:math'; 放在哪都不行(包括uni.scss)

  • DCloud_UNI_HT

    uni.sass 是可行,看看你 怎么写的 ?报什么错误

    2025-03-14 14:44

  • 巷子

    回复 DCloud_UNI_HT:

    // uni.scss

    @use 'sass:math';

    // index.vue

    $cell-spacing: 20rpx;

    $padding: math.div($cell-spacing, 2);

    早上试了一下似乎也会报,时间原因没有深入,4.56版本

    2025-03-14 17:47

  • 小黑仔子

    回复 巷子: 我这也是一样。跑不起来了。

    2025-03-15 12:07

  • 小黑仔子

    回复 小黑仔子: @ DCloud_UNI_HT

    2025-03-15 12:07

  • 小黑仔子

    回复 DCloud_UNI_HT:

    还是依然报错,请看看。

    2025-03-15 12:14

  • 靐齉齾麤龖龗

    回复 巷子: 这个$padding使用math的话应该一起放到uni.scss里面,然后在单页里面使用。而不是uni.scss里面定义,却跑到单页里面使用math.div

    2025-03-17 10:18

  • 巷子

    回复 靐齉齾麤龖龗:好的,谢谢, 如果是这样的话,感觉不太方便,真实规范是这样的话,后续我还得把这些计算抽出来,后续官方应该也支持在单页面中写@use 'sass:math';

    2025-03-17 10:41

  • 巷子

    回复 小黑仔子: 看楼下大哥回复,应该可以

    2025-03-17 10:41

  • 靐齉齾麤龖龗

    回复 巷子: 你可以在uni.scss里面定义一个scss方法,然后在页面里面可以直接使用该函数传参进去,应该就可以规避了,不过我没试过

    2025-03-17 10:44

  • 巷子

    回复 靐齉齾麤龖龗: 好的,谢谢,后续我试试

    2025-03-17 13:22

w***@163.com

w***@163.com

Uncaught Error: Module build failed (from ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/sass-loader/dist/cjs.js):
SassError: There is no module with the namespace "math".
我的是报这个错误

z***@foxmail.com

z***@foxmail.com

vue3 也有相同的问题

环境:
目前 sass 升级到1.86.0; "@dcloudio/uni-app": "3.0.0-alpha-4050720250320001",

问题描述:

  • 原有使用@import 的语法,会出现
    Deprecation Warning [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

  • 自定义使用@use 语法均会出现
    SassError: @use rules must be written before any other rules.

分析原因:
uniapp 优先将 uni.scss 以@import 的方式引用每个 vue 文件的<script>

解决方案:
建议官方,将默认的导入方式由@import改为@use uni.scss as *;

关联问题:https://ask.dcloud.net.cn/question/207629

  • DCloud_UNI_FengXY

    vue3目前是读取的uni.scss文件内容,通过additionalData传入的,并没有使用@import,vue2之前是@import,4.61会调整成@use。你的那个报错应该不是uni.scss引发的,是不是有三方库或者自己代码里,哪里用到了@import

    2025-04-03 19:15

1888

1888 - 1888

4.57

vue2 manifest.json已配置"sassImplementationName" : "node-sass"
在App.vue中引入全局公共样式文件#import url("./xxx/common.css")时,自定义组件<style lang="scss" scoped>,发现app端和微信小程序表现不一致
例如common.css中列明.flex{display:flex},在自定义组件A的元素中赋类class=“flex",微信小程序生效,APP端没有生效。
未更新前是各端表现一致的,不知道各位有没有遇到相同问题?

  • DCloud_UNI_FengXY

    可以提供一个测试项目

    2025-04-10 13:14

  • 1888

    回复 DCloud_UNI_FengXY: 更正一下,https://ask.dcloud.net.cn/question/207891?column=log&rf=false

    2025-04-10 16:01

要回复问题请先登录注册