浅谈关于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 相关文章推荐
js 页面关闭前的出现提示的实现代码
May 25 Javascript
简单时间提示DEMO从0开始一直进行计时
Nov 19 Javascript
ExtJS4 动态生成的grid导出为excel示例
May 02 Javascript
javascript将url中的参数加密解密代码
Nov 17 Javascript
微信小程序网络请求的封装与填坑之路
Apr 01 Javascript
老生常谈combobox和combotree模糊查询
Apr 17 Javascript
Vue Autocomplete 自动完成功能简单示例
May 25 Javascript
layui 解决form表单点击无反应的问题
Oct 25 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
Jul 20 Javascript
js实现跳一跳小游戏
Jul 31 Javascript
Vue项目配置跨域访问和代理proxy设置方式
Sep 08 Javascript
JavaScript实现外溢动态爱心的效果的示例代码
Mar 21 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
PHP学习之整理字符串
2011/04/17 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
layui 对table中的数据进行转义的实例
2019/09/12 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
用实例解释Python中的继承和多态的概念
2015/04/27 Python
详解Python编程中time模块的使用
2015/11/20 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
大学军训感想
2014/02/12 职场文书
知识竞赛主持词
2014/03/26 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang