将 sass-resources-loader 与 vue-cli v3.x 一起使用

Posted

技术标签:

【中文标题】将 sass-resources-loader 与 vue-cli v3.x 一起使用【英文标题】:Using sass-resources-loader with vue-cli v3.x 【发布时间】:2018-08-11 15:58:35 【问题描述】:

如何使用sass-resources-loader配合vue-cli@3.x添加全局scss变量和mixins。

【问题讨论】:

【参考方案1】:

vue-cli@3.x 使用 webpack-chain 来管理其 webpack 配置。将 sass-resources-loader 添加到预定义的 webpack 配置中。将以下内容添加到vue.config.js

vue.config.js

const path = require('path')

module.exports = 
  lintOnSave: false,
  chainWebpack: (config) => 
    config
      .module
      .rule('vue')
      .use('vue-loader')
      .tap((options) => 
        options.loaders.scss = options.loaders.scss.concat(
          loader: 'sass-resources-loader',
          options: 
            resources: path.resolve('./src/scss/_variables.scss'),
          ,
        )
        return options
      )

    config
      .module
      .rule('scss')
      .use('sass-resources-loader')
      .loader('sass-resources-loader')
      .options(
        resources: path.resolve('./src/scss/_variables.scss'),
      )
  ,

希望这会有所帮助!

【讨论】:

在我的情况下,vue-loader 选项只包含 compilerOptions: preserveWhitespace: false 这导致 TypeError: Cannot read property 'scss' of undefined 知道有什么问题吗? 这似乎不再适用于 vue-loader 15。【参考方案2】:

正如您在the docs 中看到的,最简单的方法是使用 loaderOptions 作为 sass 预处理器。不需要任何额外的依赖:

module.exports = 
  css: 
    loaderOptions: 
      sass: 
        prependData: `
          @import "@/scss/_variables.scss";
          @import "@/scss/_mixins.scss";
        `
      
    
  
;

【讨论】:

正如@constant-meiring 之前提到的,这是使用 vue-loader 15 解决这个问题的正确方法【参考方案3】:
css: 
    loaderOptions: 
        stylus: 
            loader: 'stylus-resources-loader',
            import: [path.resolve(__dirname, 'src/styles/imports.styl')]
        
    

【讨论】:

虽然此代码可能会回答问题,但提供有关 why 和/或 如何 此代码回答问题的附加上下文可提高其长期价值.

以上是关于将 sass-resources-loader 与 vue-cli v3.x 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

vue 单独引用sass文件

vue中less文件全局引用

在vue中的设置less全局变量

在vue中的设置less全局变量

全局SASS/SCSS变量在Vue项目中应用解决方案

Storybook 全局 Scss 变量