最近因爲項目要求查閱了不少關於scss公用的文章,如下只是對那些文章進行簡單的總結javascript
a.當咱們要使用scss文件的共用時,首先咱們就要想到如何應當如何編輯scss文件,好比下降scss文件的變量與混入的耦合,咱們能夠將scss文件中的變量和混入分離開來使用單獨的文件存儲,此外還能夠編寫一些默認樣式的scss文件 。css
variable.scss:存儲scss變量的文件html
@charset 'utf-8'; $bg:skyblue; $w:100px; $h:100px; $tsize:50px; $w2:200px; $h2:200px;
mixin.scss:存儲scss混入的文件vue
@charset 'utf-8'; @mixin wh($w,$h) { width: $w; height: $h; border: 1px solid red; }
base.scss:存儲默認樣式的scss文件java
@charset 'utf-8'; .test{ border: 5px solid pink; height: 100px; width: 100px; }
b.如今最關鍵的是如何讓vue組件也能用使用咱們定義的公用的scss文件 ,固然咱們也能夠在每一個組件中使用import語句導入相應的scss文件,可是這樣會致使代碼臃腫,難以維護。因此咱們能夠藉助相關工具來解決這個問題。vue-cli
若是使用的是vue-cli的版本是比較低的版本,咱們能夠經過使用 sass-resources-loader這個插件,修改vue-cli的目錄下build/utils.js 。從而實現scss文件的共享。npm
步驟1:首先安裝sass-resources-loader這個插件。segmentfault
npm i sass-resources-loader --save-dev
步驟2:修改build文件夾下的utils.js文件,找到return選項,修改它的scss屬性進行入下配置,其餘不用改變。sass
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組件,進行入下配置less
<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-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"; ` } } } }
若是使用的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') ] }) }) } }