浅谈关于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如何把参数列严格转换成数组实现思路
Apr 01 Javascript
jquery动态加载js三种方法实例
Aug 03 Javascript
js弹窗返回值详解(window.open方式)
Jan 11 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
详解JS正则replace的使用方法
Mar 06 Javascript
Bootstrap每天必学之警告框插件
Apr 26 Javascript
深入浅析JavaScript中with语句的理解
May 12 Javascript
javascript中对Date类型的常用操作小结
May 19 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
May 13 Javascript
Javascript实现秒表计时游戏
May 27 Javascript
vue 项目引入echarts 添加点击事件操作
Sep 09 Javascript
JS轻量级函数式编程实现XDM三
Jun 16 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对象类型判断
2008/08/27 PHP
php生成随机颜色的方法
2014/11/13 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
js根据日期判断星座的示例代码
2014/01/23 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
PHP7新特性简述
2017/06/11 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
python实现决策树分类
2018/08/30 Python
python中的print()输出
2019/04/12 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
wxPython实现绘图小例子
2019/11/19 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
美国第二大连锁药店:Rite Aid
2019/04/03 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
学校门卫工作职责
2013/12/07 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
毕业生求职信
2014/06/10 职场文书
有关环保的标语
2014/06/13 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
golang slice元素去重操作
2021/04/30 Golang
浅析NIO系列之TCP
2021/06/15 Java/Android
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
MySQL 数据库范式化设计理论
2022/04/22 MySQL