如何在laravel-mix中使用CSS Modules

使用Vue開發(fā)SPA時昔脯,如果想在組件中用 CSS Modules 來替代 scoped 控制CSS作用域廉白,只需要在Webpack的 vue-loader 中寫上相關(guān)配置即可猴蹂。然而在基于Laravel的項目中就沒有那么容易了晕讲。Laravel默認(rèn)采用了 laravel-mix 作為構(gòu)建工具瓢省,不太方便自己定制配置勤婚。

根據(jù)官網(wǎng)文檔的說明,首先嘗試用 mix.webpackConfig() 來覆蓋相應(yīng)的配置項:

mix.webpackConfig({
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader',
                options: {
                    cssModules : {
                        localIdentName: '[name]-[hash:base64:5]',
                        camelCase: true,
                    }
                }
            }
        ]
    }
});

然而這并不起作用!

于是想到直接去修改 laravel-mix 的源碼型雳,在 node_modules\laravel-mix\src\builder\webpack-rules.js 文件中找到 vue-loader 的rules纠俭,在 options 中添加一項 CSS module 的配置朴则,這次可以正常編譯運行了乌妒!

cssModules : {
    localIdentName: '[name]-[hash:base64:5]',
    camelCase: true,
}

這樣其實不是最佳的解決方案,畢竟修改了源碼,有沒有可能直接在 webpack.mix.js 中搞定呢席镀?

在Google搜索了一大圈也沒找到合理的方案,可能是這樣的需求比較少見屎篱。后來發(fā)現(xiàn)在該項目的 GitHub Issues 上有人遇到的類似的問題交播,終于在最后看到了解決方案秦士。由于Laravel 5.5默認(rèn)自帶的是 laravel-mix^1.0隧土,我們必須先升級到最新版本(我使用的是 v2.11.1):

npm install laravel-mix@latest

接下去可以調(diào)用新增的 extend 方法來實現(xiàn)我們的需求曹傀,代碼如下:

mix.extend('cssModules', function(webpackConfig) {
    webpackConfig.module.rules.forEach( module => {
        if(module.loader !== 'vue-loader')
            return;
        module.options.cssModules = {
            localIdentName: '[name]-[hash:base64:5]',
            camelCase: true,
        };
    });
});

關(guān)于 Extending Mix 的詳細使用可以查看官方文檔

最后在編譯打包資源之前,調(diào)用我們自定義注冊的 cssModules 方法:

mix.cssModules()
    .js('resources/assets/js/app.js', 'public/js')
    .version();

大功告成炭剪! 這下我們可以在Vue組件中使用 CSS Modules 的寫法了。同樣的方法也可以用于注入其它相關(guān)的配置错妖,如 vue-i18n,遇到相關(guān)需求的可以自行嘗試痴施。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市神得,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛇数,死亡現(xiàn)場離奇詭異挪钓,居然都是意外死亡,警方通過查閱死者的電腦和手機耳舅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門碌上,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倚评,“玉大人,你說我怎么就攤上這事馏予√煳啵” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵霞丧,是天一觀的道長呢岗。 經(jīng)常有香客問我,道長蛹尝,這世上最難降的妖魔是什么后豫? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮突那,結(jié)果婚禮上挫酿,老公的妹妹穿的比我還像新娘。我一直安慰自己愕难,他們只是感情好早龟,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著猫缭,像睡著了一般拄衰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饵骨,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音茫打,去河邊找鬼居触。 笑死,一個胖子當(dāng)著我的面吹牛老赤,可吹牛的內(nèi)容都是我干的轮洋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼抬旺,長吁一口氣:“原來是場噩夢啊……” “哼弊予!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起开财,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤汉柒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后责鳍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碾褂,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年历葛,在試婚紗的時候發(fā)現(xiàn)自己被綠了正塌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖乓诽,靈堂內(nèi)的尸體忽然破棺而出帜羊,到底是詐尸還是另有隱情,我是刑警寧澤鸠天,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布讼育,位于F島的核電站,受9級特大地震影響粮宛,放射性物質(zhì)發(fā)生泄漏窥淆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一巍杈、第九天 我趴在偏房一處隱蔽的房頂上張望忧饭。 院中可真熱鬧,春花似錦筷畦、人聲如沸词裤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吼砂。三九已至,卻和暖如春鼎文,著一層夾襖步出監(jiān)牢的瞬間渔肩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工拇惋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留周偎,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓撑帖,卻偏偏與公主長得像蓉坎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子胡嘿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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