【问题标题】:How can I set global Sass variables in Vue with Webpack?如何使用 Webpack 在 Vue 中设置全局 Sass 变量?
【发布时间】:2021-02-22 13:38:54
【问题描述】:

这些是我使用的 Sass 模块的版本:

node-sass@^4

sass-loader@^7

我尝试在vue.config.js 文件中设置一个全局 Sass 变量:

module.exports = {
  css: {
    loaderOptions: {
      sass: {
        prependData: `$primaryColor: #16A085;`
      }
    }
  }
}

但在运行npm run dev 后,我收到以下错误:

Module build failed:
     color: $primaryColor;
           ^
      Undefined variable: "$primaryColor".
      in C:\Users\tomek\Desktop\projekty\projectsBacketlist\noteTakingApp\frontend\noteTakkingApp\src\views\NoteEdit.vue (line 157, column 13)

 @ ./node_modules/vue-style-loader!./node_modules/css-loader?{"sourceMap":true}!./node_modules/vue-loader/lib/style-compiler?{"vue":true,"id":"data-v-b5e02554","scoped":false,"hasInlineConfig":false}!./node_modules/sass-loader/dist/cjs.js?{"sourceMap":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./src/views/NoteEdit.vue 4:14-374 13:3-17:5 14:22-382
 @ ./src/views/NoteEdit.vue
 @ ./src/main.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 webpack/hot/dev-server ./src/main.js

【问题讨论】:

    标签: javascript node.js vue.js webpack sass-loader


    【解决方案1】:

    我有同样的问题,这是我的解决方案:

          return {
        css: generateLoaders(),
        postcss: generateLoaders(),
        less: generateLoaders('less'),
        sass: generateLoaders('sass', { indentedSyntax: true }),
        // scss: generateLoaders('sass'),
        scss: generateLoaders('sass', { data: `@import '@/scss/_variables.scss';` }),
        stylus: generateLoaders('stylus'),
        styl: generateLoaders('stylus')
      }
    }
    

    我的文件在“src”中,所以基本上转到顶部并找到文件夹 scss。

    【讨论】:

      【解决方案2】:

      您的project 不是Vue CLI 生成的项目,所以vue.config.js 根本不会被处理。

      在您的情况下,您将在 build/utils.js 中配置 Sass 7.x 加载程序以传递 data 选项:

      exports.cssLoaders = function (options) {
        //...
      
        return {
          //...
          sass: generateLoaders('sass', { data: `$primaryColor: #16A085;` }),
          scss: generateLoaders('sass', { data: `$primaryColor: #16A085;` }),
        }
      }
      

      但是,您应该注意sass-loader 文档中的注释:

      请注意:由于您是在注入代码,这将破坏您的入口文件中的源映射。通常有比这更简单的解决方案,比如多个 Sass 入口文件。

      【讨论】:

        猜你喜欢
        • 2019-05-10
        • 2019-07-02
        • 2019-01-15
        • 2023-03-11
        • 1970-01-01
        • 2020-10-24
        • 1970-01-01
        • 2021-09-01
        • 2019-06-13
        相关资源
        最近更新 更多