通過 sass-resources-loader 全局注冊 Sass 變量

本文講述如何通過 sass-resources-loader 全局注冊變量及由 @mixin聋涨、% 定義的通用樣式浑塞,以 vue 項目為例语婴。

先描述下情境,項目中含如下 3 個 .scss 文件:

其中 app.scss 在入口文件 entry.js 內(nèi) import溶握,它定義了部分通用樣式(但并未有使用 @mixin 或 % 定義的)杯缺,引用方式即在組件元素上添加相應(yīng) class。請注意:

app.scss 內(nèi)的通用樣式并未有使用 @mixin 或 % 定義的睡榆。

app.scss 內(nèi)定義的 @mixin萍肆、%、變量胀屿,若在 .vue 中引用需再次 import app.scss塘揣,否則 not found(sass 變量作用域的鍋):

<style lang="scss" scoped>
@import "../assets/app.scss";
.gm-nodata {
    img, p {
        position: absolute;
        @extend %gm-center;
    }
    p {
        font-size: 0.3rem;
        line-height: 0.4rem;
        color: $fClrWeak;
        margin-top: 1.5rem;
    }
}
</style>

每一 .vue 均 import app.scss,很麻煩...然而更嚴重的是:

上圖為 build 后部分代碼的截圖宿崭,顯而易見上下兩段代碼是冗余的亲铡。因為在 .vue 中每 import app.scss 均會產(chǎn)生一段雷同的代碼。

故不宜在 app.scss 內(nèi)定義 @mixin葡兑、%奖蔓、變量,應(yīng)將 @mixin讹堤、% 抽離至 mixins.scss锭硼,變量抽離至 vars.scss。但在 .vue 中引用它們也需各自 import蜕劝,依然麻煩...

是否可全局注冊 mixins.scss 及 vars.scss?請嘗試 sass-resources-loader轰异!

在 build/utils.js 的 exports.cssLoaders 函數(shù)內(nèi)添加如下代碼:

exports.cssLoaders = function (options) {
    // ...

    function generateSassResourceLoader () {
        var loaders = [
            cssLoader,
            'sass-loader',
            {
                loader: 'sass-resources-loader',
                options: {
                    resources: [
                        path.resolve(__dirname, '../src/assets/var.scss'),
                        path.resolve(__dirname, '../src/assets/mixins.scss')
                    ]
                }
            }
        ]
        if (options.extract) {
            return ExtractTextPlugin.extract({
                use: loaders,
                fallback: 'vue-style-loader'
            })
        } else {
            return ['vue-style-loader'].concat(loaders)
        }
    }

    // ...

    return {
        // ...
        sass: generateSassResourceLoader(),
        scss: generateSassResourceLoader(),
        // ...
    }
}

Now you can use these resources without manually importing them.

那我們可將 app.scss 添加至 sass loader resources 嗎岖沛?像這樣:

var loaders = [
    cssLoader,
    'sass-loader',
    {
        loader: 'sass-resources-loader',
        options: {
            resources: [
                path.resolve(__dirname, '../src/assets/app.scss'),
                path.resolve(__dirname, '../src/assets/var.scss'),
                path.resolve(__dirname, '../src/assets/mixins.scss')
            ]
        }
    }
]       

不可以!build 后代碼冗余:

為何搭独?sass-resources-loader 似乎幫我們完成了 import婴削,但與手動 import 本質(zhì)并無差異。然 var.scss牙肝、mixins.scss 注入 sass loader resources 不會產(chǎn)生冗余代碼唉俗。

使用 @mixin嗤朴、% 定義的通用樣式未被繼承不會被解析產(chǎn)生相應(yīng)的 css,則不會冗余虫溜。

想了解更多的同學請研讀 Sass: Syntactically Awesome Style Sheets雹姊。

謝幕!


作者:呆戀小喵

相關(guān)文章:Sass 學習筆記

我的后花園:https://sunmengyuan.github.io/garden/

我的 github:https://github.com/sunmengyuan

原文鏈接:https://sunmengyuan.github.io/garden/2018/02/06/sass-var.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衡楞,一起剝皮案震驚了整個濱河市吱雏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瘾境,老刑警劉巖歧杏,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異迷守,居然都是意外死亡犬绒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門兑凿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凯力,“玉大人,你說我怎么就攤上這事急膀【谛” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵卓嫂,是天一觀的道長慷暂。 經(jīng)常有香客問我,道長晨雳,這世上最難降的妖魔是什么行瑞? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮餐禁,結(jié)果婚禮上血久,老公的妹妹穿的比我還像新娘。我一直安慰自己帮非,他們只是感情好氧吐,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著末盔,像睡著了一般筑舅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陨舱,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天翠拣,我揣著相機與錄音,去河邊找鬼游盲。 笑死误墓,一個胖子當著我的面吹牛蛮粮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谜慌,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼然想,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了畦娄?” 一聲冷哼從身側(cè)響起又沾,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎熙卡,沒想到半個月后杖刷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡驳癌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年滑燃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颓鲜。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡表窘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甜滨,到底是詐尸還是另有隱情乐严,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布衣摩,位于F島的核電站昂验,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏艾扮。R本人自食惡果不足惜既琴,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泡嘴。 院中可真熱鬧甫恩,春花似錦、人聲如沸酌予。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抛虫。三九已至松靡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間莱褒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工涎劈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留广凸,地道東北人阅茶。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像谅海,于是被迫代替她去往敵國和親脸哀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容