浅谈关于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 27 Javascript
javascript数组去掉重复
May 12 Javascript
js操作iframe兼容各种主流浏览器示例代码
Jul 22 Javascript
JS批量修改PS中图层名称的方法
Jan 26 Javascript
JS选项卡动态替换banner图片路径的方法
May 11 Javascript
javascript新闻跑马灯实例代码
Jul 29 Javascript
jQuery 3.0十大新特性最终版发布
Jul 14 Javascript
JavaScript实现DOM对象选择器
Sep 24 Javascript
详解Angular的双向数据绑定(MV-VM)
Dec 26 Javascript
利用Js+Css实现折纸动态导航效果实例源码
Jan 25 Javascript
vue实现全选和反选功能
Aug 31 Javascript
boostrap模态框二次弹出清空原有内容的方法
Aug 10 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
PDO::quote讲解
2019/01/29 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
Python标准异常和异常处理详解
2015/02/02 Python
zookeeper python接口实例详解
2018/01/18 Python
详解python中的线程
2018/02/10 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
实验室安全管理制度
2015/08/05 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL