uni-app app.vue 引入scss文件后 @mixin不生效

uni-app app.vue 引入scss文件后 @mixin不生效

开发环境 版本号 项目创建方式
Mac Monterey 12.3 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Mac

PC开发环境操作系统版本号:Monterey 12.3

HBuilderX类型:Alpha

HBuilderX版本号:3.4.6

手机系统:iOS

手机系统版本号:iOS 15

手机厂商:苹果

手机机型:iphone 12

页面类型:nvue

vue版本:vue2

打包方式:离线

操作步骤:
APP.vue下引入的全局样式
```scss
[@import](/user/import) "@/static/css/app.scss";

app.scss 内容

[@mixin](/user/mixin) flex($direction: row) {
  flex-direction: $direction;
}

// 外边距
.mlr{
  margin-left: 20rpx;
  margin-right: 20rpx;
}

index.nvue style 下使用@include flex;会报错:SassError: no mixin named flex

[@mixin](/user/mixin) flex 放到 index.nvue style下就正常使用!

.mlr在index.nvue下是生效的!

以上文件都设置了lang="scss"

顺便问一下nvue下不支持px吗? 只能使用rpx吗? 反正我用px就没有效果,用rpx才可以!

预期结果: 正常

实际结果: 不正常

bug描述: app.vue 引入scss文件后 [@mixin](/user/mixin)不生效

2 回复

解决了吗 老哥


uni-app 中使用 scss 时,如果 @mixin 不生效,可能是由于以下几个原因导致的。以下是一些常见的排查步骤和解决方案:

1. 确保 scss 文件被正确引入

app.vue 中引入 scss 文件时,确保路径正确,并且使用了正确的语法。

<style lang="scss">
@import '@/styles/mixins.scss'; // 确保路径正确
</style>

2. 检查 scss 文件中的 @mixin 定义

确保 @mixinscss 文件中正确定义,并且没有语法错误。

// mixins.scss
@mixin center {
  display: flex;
  justify-content: center;
  align-items: center;
}

3. 确保 @mixin 被正确使用

app.vue 或其他组件中,确保 @mixin 被正确调用。

<template>
  <div class="container">
    <p>Hello, World!</p>
  </div>
</template>

<style lang="scss">
@import '@/styles/mixins.scss';

.container {
  [@include](/user/include) center; // 确保正确调用 @mixin
}
</style>

4. 检查 uni-appscss 配置

确保 uni-app 项目已经正确配置了 scss 支持。通常情况下,uni-app 默认支持 scss,但如果你使用的是自定义配置,可能需要检查 webpackvite 的配置。

5. 检查 scss 编译器的版本

有时 scss 编译器的版本问题也会导致 @mixin 不生效。确保你使用的 scss 编译器版本是最新的,并且与 uni-app 兼容。

6. 清理缓存并重新编译

有时缓存问题可能导致样式不生效。尝试清理项目缓存并重新编译。

# 清理缓存
rm -rf node_modules/.cache

# 重新安装依赖
npm install

# 重新运行项目
npm run dev

7. 检查 scss 文件的编码

确保 scss 文件的编码是 UTF-8,避免因编码问题导致样式不生效。

8. 检查 scss 文件的路径

确保 scss 文件的路径在项目中是唯一的,避免因路径冲突导致样式不生效。

9. 使用 [@use](/user/use) 代替 @import

如果你使用的是较新的 scss 版本,可以尝试使用 [@use](/user/use) 代替 @import

[@use](/user/use) '@/styles/mixins.scss' as *;

.container {
  [@include](/user/include) center;
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!