webpack項(xiàng)目輕松混用css module的方法
前言
本文講述css-loader
開(kāi)啟css模塊
功能之后,如何與引用的npm包中樣式文件不產(chǎn)生沖突。
比如antd-mobilenpm
包的引入。在不做特殊處理的前提下,樣式文件將會(huì)被轉(zhuǎn)譯成css module
。
一、產(chǎn)生問(wèn)題的原因
{ test: /\.css$/, use: [ 'style-loader', { loader: 'css-loader', options: { modules: true, localIdentName: '[hash:base64:6]' } }, 'postcss-loader' ] }
以上代碼片段,摘自webpack配置的module.rule。
可以看出wepack在編譯過(guò)程中,遇到.css結(jié)尾的文件,都會(huì)交由postcss-loader、css-loader和style-loader依次處理。
因?yàn)閏ss-loader開(kāi)啟了css模塊功能,所以,所有經(jīng)過(guò)處理的css文件,類名都將被改變。
二、初步改進(jìn)
使用exclude和include進(jìn)行區(qū)分
1.node_module文件夾內(nèi)的文件,避免被當(dāng)前rule處理
{ test: /\.css$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader', options: { modules: true, localIdentName: '[hash:base64:6]' } }, { loader: 'postcss-loader' } ], exclude:[path.resolve(__dirname, '..', 'node_modules')] }
如上所示,將node_module文件夾內(nèi)的文件,用exclude排除在外,不用當(dāng)前rule進(jìn)行處理。
2.單獨(dú)處理node_module內(nèi)的css文件
{ test: /\.css$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader' }, { loader: 'postcss-loader' } ], include:[path.resolve(__dirname, '..', 'node_modules')] }
三、升級(jí)版,支持css module模式和普通模式混用
1.用文件名區(qū)分兩種模式
- *.global.css 普通模式
- *.css css module模式
這里統(tǒng)一用 global 關(guān)鍵詞進(jìn)行識(shí)別。
2.用正則表達(dá)式匹配文件
// css module { test: new RegExp(`^(?!.*\\.global).*\\.css`), use: [ { loader: 'style-loader' }, { loader: 'css-loader', options: { modules: true, localIdentName: '[hash:base64:6]' } }, { loader: 'postcss-loader' } ], exclude:[path.resolve(__dirname, '..', 'node_modules')] } // 普通模式 { test: new RegExp(`^(.*\\.global).*\\.css`), use: [ { loader: 'style-loader' }, { loader: 'css-loader', }, { loader: 'postcss-loader' } ], exclude:[path.resolve(__dirname, '..', 'node_modules')] }
四、其他問(wèn)題
less在使用css module時(shí),對(duì)url的解析存在沖突,可以用resolve-url-loader進(jìn)行解決,直接上代碼:
test: /\.less/, use: [ { loader: "style-loader" }, { loader: "css-loader", options: { sourceMap: true, importLoaders: 2 } }, { loader: "postcss-loader", options: { sourceMap: true } }, { loader: "resolve-url-loader", options: { sourceMap: true } }, { loader: "less-loader", options: { sourceMap: true } } ]
參考
[1] [Updated README regarding relative filepaths issue #121]
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ECharts異步加載數(shù)據(jù)與數(shù)據(jù)集(dataset)
這篇文章介紹了ECharts異步加載數(shù)據(jù)與數(shù)據(jù)集(dataset),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06JS module的導(dǎo)出和導(dǎo)入的實(shí)現(xiàn)代碼
這篇文章主要介紹了JS module的導(dǎo)出和導(dǎo)入的實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02js判斷瀏覽器的環(huán)境(pc端,移動(dòng)端,還是微信瀏覽器)
這篇文章主要介紹了js判斷瀏覽器的環(huán)境(pc端,移動(dòng)端,還是微信瀏覽器),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01使用openSpeDiv方法實(shí)現(xiàn)Ecshop登錄彈窗框效果
在ECSHOP的目錄/JS/common.js中有一個(gè)openSpeDiv方法是實(shí)現(xiàn)ECSHOP的彈窗效果的。接下來(lái)通過(guò)本文給大家分享使用openSpeDiv方法實(shí)現(xiàn)Ecshop登錄彈窗框效果,需要的朋友參考下2017-03-03javascript 讀取內(nèi)聯(lián)之外的樣式(style、currentStyle、getComputedStyle區(qū)別介紹
最常用的是style屬性,在JavaScript中,通過(guò)document.getElementById(id).style.XXX就可以獲取到XXX的值,但意外的是,這樣做只能取到通過(guò)內(nèi)嵌方式設(shè)置的樣式值,即style屬性里面設(shè)置的值。2010-05-05微信小程序?qū)崿F(xiàn)購(gòu)物車代碼實(shí)例詳解
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)購(gòu)物車代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08小程序?qū)崿F(xiàn)訂單倒計(jì)時(shí)功能
這篇文章主要為大家詳細(xì)介紹了小程序?qū)崿F(xiàn)訂單倒計(jì)時(shí)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04JS實(shí)現(xiàn)常見(jiàn)的TAB、彈出層效果(TAB標(biāo)簽,斑馬線,遮罩層等)
這篇文章主要介紹了JS實(shí)現(xiàn)常見(jiàn)的TAB、彈出層效果,包括TAB標(biāo)簽,斑馬線,遮罩層等.以完整實(shí)例總結(jié)分析了JavaScript實(shí)現(xiàn)tab切換、隔行變換及彈出遮罩層的完整實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-10-10javascript實(shí)現(xiàn)生成并下載txt文件方式
這篇文章主要介紹了javascript實(shí)現(xiàn)生成并下載txt文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Javascript圖像處理—圖像形態(tài)學(xué)(膨脹與腐蝕)
上一篇文章,我們講解了圖像處理中的閾值函數(shù),這一篇文章我們來(lái)做膨脹和腐蝕函數(shù)2013-01-01