Vue中使用Sass全局变量

摘要:
首先添加两个functions://simplify路径函数resolveResource{returnpath.resolve}functiongenerateAssResourceLoader(){varloaders=[cssLoader,'sass loader',{loader:'sass resources loader‘,options:ions.extract){retturnExtractTextPlugin.extract({use:loader,fallback:'vue style loader‘})}否则{return['vue样式加载器‘].contat(loader)}}然后在util中找到以下代码。js文件,并将“generatePassResourceLoader”方法替换为sass和scss属性。代码如下(默认代码已注释掉):return{css:generateLoaders(),postcs:generateLoader(),less:generateLoads('less'),//sass:generateLoaders('sass',{indentedSyntax:true}),//参考上述配置方法scss:generateAssResourceLoader(),//参考上述配置方式styl:generateLoaders('stylus'),styl:generateLoaders('sylus')}配置完成后,重新启动项目以在其他组件中使用全局变量。

前言

假设我们原有项目的主题色是蓝色的,这时有个需求,需要把主题色改成橙色的。一般情况下,我们可能会在main.js中引入公共样式文件,但你会发现,在组件中使用公共样式文件中定义的某个参数时,会报一个错误:"变量未定义"。

那还有一种写法是,在每个组件中都引入公共样式(注:需要用到公共样式的组件),但这样写,感觉代码会很不perfect 。

那有没有什么办法,只要公共样式引入一次,即可在全部组件中使用呢?

方法一:使用sass-resources-loader解决Sass全局变量问题

sass-resources-loader可以访问sass资源任何一个需要访问的sass模块。所以,可以使用共享变量和混合所有SASS样式,而不去每个文件都引用。

1.安装sass-resources-loader

npm install sass-resources-loader --save-dev

2.相关配置

在build文件夹下,找到util.js文件,然后配置相关代码。首先新增两个函数:

//简化路径
  function resolveResource(name){
    return path.resolve(__dirname,'../static/css/'+name)
  }

  function generateSassResourceLoader(){
    var loaders = [
      cssLoader,
      'sass-loader',
      {
        loader: 'sass-resources-loader',
        options: {
          // 多个文件时用数组的形式传入,单个文件时可以直接使用 path.resolve(__dirname, '../src/init.scss'
          resources: [resolveResource('init.scss')]  
        }
      }
    ]
    if (options.extract) {
      return ExtractTextPlugin.extract({
        use: loaders,
        fallback: 'vue-style-loader'
      })
    } else {
      return ['vue-style-loader'].concat(loaders)
    }
  }

然后在util.js文件中找到下面的代码,把“generateSassResourceLoader”方法替换到sass和scss属性中,代码如下(注释掉那一句是默认代码):

return {
    css: generateLoaders(),
    postcss: generateLoaders(),
    less: generateLoaders('less'),
    // sass: generateLoaders('sass', { indentedSyntax: true }),
    sass:generateSassResourceLoader(),//引用上面的配置方法
    scss: generateSassResourceLoader(),//引用上面的配置方法
    stylus: generateLoaders('stylus'),
    styl: generateLoaders('stylus')
  }

配置完后,重新启动一下项目,就可以在其它组件中使用全局变量了。

方法二:使用vue-cli 3

在vue.config.js文件中配置css.loaderOptions 选项,这边就直接贴官网上的代码了,官网地址:灰机直达

Vue中使用Sass全局变量第1张

引入多个的话,在data属性中,分号后面直接添加即可。

sass: {
        // @/ 是 src/ 的别名
        // 所以这里假设你有 `src/variables.scss` 这个文件
        data: `
                 @import "~@/variables.scss";
                 @import "~@/test.scss";
              `
}

方法三:直接在App.vue中引入公共样式文件,但不能添加scoped

参考地址:

https://blog.csdn.net/qq_27868533/article/details/79651659

https://www.jianshu.com/p/a0a19ae0c737

免责声明:文章转载自《Vue中使用Sass全局变量》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Wpf(Storyboard)动画简单实例axios---基本运用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

邓_Jquery测试题

一、Jquery测试题 下面哪种不是jquery的选择器?(单选)A、基本选择器 B、后代选择器 C、类选择器 D、进一步选择器考点:jquery的选择器 (C) 当DOM加载完成后要执行的函数,下面哪个是正确的?(单选)jQuery(expression, [context]) B、jQuery(html, [ownerDocument]) C、jQue...

vue基础(七),同源策略以及跨域,vuex

跨域基础 跨域: 1、是什么 你的目标和你自己现在的位置一样还是不一样 浏览器上的同源策略 特点: 1、跨域只存在于浏览器 2、不在浏览器发请求是不会存在跨域问题的 3、http请求分为两大类: 普通http请求(如百度请求)和ajax请求(跨域是出...

更改file文件上传默认CSS样式

前言: 多数时候我们需要表单上传文件,如图片。但是浏览器默认的input[file]样式很不友好, 需要我们自己手动修改. 如图基于bootstrap布局的表单, 但file文件上传样式不敢恭维. 1 <div class="form-group"> 2 <label for="avatar" class="col-md...

Vue全局异常捕获

之前没注意过这么个小技巧 , 可能在Vue文档里也有 暂时先记下了 方便摘要 Vue全局配置errorHandler可以进行全局错误收集,我们可以根据这个特性对前端异常做这样的处理:业务错误直接写在业务里;代码错误、ajax请求异常等错误可以进行全局捕获然后抛出,不至于前端页面挂掉 import Vue from 'vue' //系统错误捕获 con...

Vue-draggable组件, 进行Vue 表格内容的拖拽排序

Vue-draggable 的github传送门 :  https://github.com/SortableJS/Vue.Draggable 一. 下载依赖包:npm install vuedraggable -S   二. 在需要使用的当前界面引入依赖,注册组件: import draggable from "vuedraggable"; export...

vue-highlightjs的使用小结

万能的github真主,让我们强大!在vue的项目中想使用highlight.js这样的代码高亮?有人帮助我们实现了vue-highlightjs 安装 yarn add highlight.js -Dyarn add vue-highlight.js -D 这里解释一下为什么要安装两个依赖:vue-highlight.js只是实现了代码高亮的功能,他的...