浅谈关于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 相关文章推荐
javascript字符串拼接的效率问题
Dec 25 Javascript
javascript操作css属性
Dec 30 Javascript
window.location不跳转的问题解决方法
Apr 17 Javascript
jquery中获取元素里某一特定子元素的代码
Dec 02 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
Feb 16 Javascript
学习Bootstrap组件之下拉菜单
Jul 28 Javascript
浅谈Javascript中Object与Function对象
Sep 26 Javascript
详解JavaScript基于面向对象之创建对象(1)
Dec 10 Javascript
jquery+json实现分页效果
Mar 07 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
Jun 12 Javascript
JS动态添加选项案例分析
Oct 17 Javascript
JS数组扁平化、去重、排序操作实例详解
Feb 24 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 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
2013/04/23 Javascript
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
Python中的面向对象编程详解(下)
2015/04/13 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
Python安装模块的常见问题及解决方法
2018/02/05 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
使用python将大量数据导出到Excel中的小技巧分享
2018/06/14 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
python tkinter实现屏保程序
2019/07/30 Python
详解Python模块化编程与装饰器
2021/01/16 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
英国袜子店:Sock Shop
2017/01/11 全球购物
李培根演讲稿
2014/05/22 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
青年教师个人总结
2015/02/11 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers