浅谈关于vue中scss公用的解决方案


Posted in Javascript onDecember 02, 2019

简述

最近由于项目要求查阅了很多关于scss公用的文章,以下只是对那些文章进行简单的总结

解决方法

a.当我们要使用scss文件的共用时,首先我们就要想到如何应当如何编辑scss文件,比如降低scss文件的变量与混入的耦合,我们可以将scss文件中的变量和混入分离开来使用单独的文件存储,此外还可以编写一些默认样式的scss文件 。

variable.scss:存储scss变量的文件

@charset 'utf-8';
$bg:skyblue;
$w:100px;
$h:100px;
$tsize:50px;
$w2:200px;
$h2:200px;

mixin.scss:存储scss混入的文件

@charset 'utf-8';
@mixin wh($w,$h) {
 width: $w;
 height: $h;
 border: 1px solid red;
}

base.scss:存储默认样式的scss文件

@charset 'utf-8';
.test{
 border: 5px solid pink;
 height: 100px;
 width: 100px;
}

​ b.现在最关键的是如何让vue组件也能用使用我们定义的公用的scss文件 ,当然我们也可以在每个组件中使用import语句导入相应的scss文件,但是这样会导致代码臃肿,难以维护。所以我们可以借助相关工具来解决这个问题。

a.方法1

如果使用的是vue-cli的版本是比较低的版本,我们可以通过使用 sass-resources-loader这个插件,修改vue-cli的目录下build/utils.js 。从而实现scss文件的共享。

步骤1:首先安装sass-resources-loader这个插件。

npm i sass-resources-loader --save-dev

步骤2:修改build文件夹下的utils.js文件,找到return选项,修改它的scss属性进行入下配置,其他不用改变。

return {
  css: generateLoaders(),
  postcss: generateLoaders(),
  less: generateLoaders('less'),
  sass: generateLoaders('sass', { indentedSyntax: true }),
  //修改这个scss属性
  scss: generateLoaders('sass').concat({
   loader:'sass-resources-loader', 
     options:{ 
     resources:[
      path.resolve(__dirname,'../src/assets/variable.scss'),
      path.resolve(__dirname,'../src/assets/mixin.scss'),
      path.resolve(__dirname,'../src/assets/base.scss') 
     ]
     }
  }),
  stylus: generateLoaders('stylus'),
  styl: generateLoaders('stylus')
 }

步骤3:测试阶段,新建一个Test.vue组件,进行入下配置

<template>
 <div>
  <!-- test类的默认样式 -->
  <div class="test">
   test
  </div>
  <div class="box2">
   ssss
  </div>
 </div>
</template>
<style lang="scss">
 .test{
  //访问公共的scss变量 
  font-size:$tsize;
  background: $bg;
 }
 .box2{
  //访问公共的scss混入 
  @include wh($w2,$h2) 
 }
</style>

浅谈关于vue中scss公用的解决方案

b.方法2

如果使用的vue-cli的版本是高版本的,那么可以直接修改vue.config.js这个文件的css.loaderOptions选项,就可以让每个组件使用公用的scss文件了。

步骤1:同样首先安装sass-resources-loader这个插件。

npm i sass-resources-loader --save-dev

步骤2:在项目主目录下新建一个vue.config.js配置文件。大概的配置参考这篇文章

const path=require('path')
 module.exports={
  publicPath: process.env.NODE_ENV === 'production' ? '/public/' : './',
  assetsDir:'assets',
  indexPath:'myIndex.html',
  filenameHashing:false,
  productionSourceMap: false,
  css: {
   loaderOptions: {
     sass: {
       //依次导入的公用的scss变量,公用的scss混入,共用的默认样式
       prependData: `
         @import "./src/assets/css/variable.scss";
        @import "./src/assets/css/mixin.scss";  
         @import "./src/assets/css/base.scss";
       `
     }
   }
  }
 }

步骤3:测试阶段,和方法一的步骤3一样。

c.方法3

如果使用的vue-cli的版本是高版本的,那么可以直接修改vue.config.js这个文件的chainWebpack这个属性来实现多个scss文件的公用。

步骤1:同样首先安装sass-resources-loader这个插件。

npm i sass-resources-loader --save-dev

步骤2:在项目主目录下新建一个vue.config.js配置文件。大概的配置参考这篇文章

const path=require('path')
module.exports={
 publicPath: process.env.NODE_ENV === 'production' ? '/public/' : './',
 assetsDir:'assets',
 indexPath:'myIndex.html',
 filenameHashing:false,
 productionSourceMap: false,
 chainWebpack:config=>{
  const types=['vue']
  types.forEach(type=>{
   config.module.rule('scss').oneOf(type).use('style-resource')
   .loader('style-resources-loader')
   .options({
    patterns:[
     //公用的scss变量 
     path.resolve(__dirname,'./src/assets/css/variable.scss'),
     //公用的scss混入 
     path.resolve(__dirname,'./src/assets/css/mixin.scss'),
     //共用的默认样式 
     path.resolve(__dirname,'./src/assets/css/base.scss')
    ]
   })
  })
 }
}

步骤3:测试阶段,和方法一的步骤3一样。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用jquery实现div的tab切换实例代码
May 27 Javascript
在javaScript中关于submit和button的区别介绍
Oct 20 Javascript
js中cookie的添加、取值、删除示例代码
Oct 21 Javascript
跟我学习javascript的全局变量
Nov 16 Javascript
每天一篇javascript学习小结(Function对象)
Nov 16 Javascript
Javascript类型转换的规则实例解析
Feb 23 Javascript
在Html中使用Requirejs进行模块化开发实例详解
Apr 15 Javascript
浅谈react.js 之 批量添加与删除功能
Apr 17 Javascript
在vue组件中使用axios的方法
Mar 16 Javascript
bootstrap模态框关闭后清除模态框的数据方法
Aug 10 Javascript
Vue使用NPM方式搭建项目
Oct 25 Javascript
js 实现ajax发送步骤过程详解
Jul 25 Javascript
详解js location.href和window.open的几种用法和区别
Dec 02 #Javascript
js实现一款简单踩白块小游戏(曾经很火)
Dec 02 #Javascript
JavaScript 自定义html元素鼠标右键菜单功能
Dec 02 #Javascript
VUE 动态组件的应用案例分析
Dec 02 #Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
Dec 02 #Javascript
vue 动态表单开发方法案例详解
Dec 02 #Javascript
vue 开发之路由配置方法详解
Dec 02 #Javascript
You might like
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
PHP在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
javascript parseInt与Number函数的区别
2010/01/21 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
Python批量发送post请求的实现代码
2018/05/05 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
Django celery异步任务实现代码示例
2020/11/26 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
什么是跨站脚本攻击
2014/12/11 面试题
能否解释一下XSS cookie盗窃是什么意思
2012/06/02 面试题
幼儿园英语教学反思
2014/01/30 职场文书
本科应届生自荐信
2014/06/29 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android