(五)模塊化處理

webpack可以將不同的文件都按照模塊的方式進(jìn)行處理悯搔,比如js佃蚜,css等都可以通過不同的loader進(jìn)行打包處理夭咬。

CSS

webpack為我們提供css-loaderstyle-loader兩個(gè)工具來(lái)處理樣式表趋箩,他們二者處理的任務(wù)是不同的赃额。
css-loader使你能夠使用類似@import 和 url(...)的方法實(shí)現(xiàn) require()的功能。
style-loader將所有的計(jì)算后的樣式加入頁(yè)面中叫确。
這二者組合在一起可以使你能夠把樣式表嵌入webpack打包后的JS文件中跳芳。
我們接著上面的例子來(lái)配置這兩個(gè)工具:
安裝

npm install --save-dev css-loader
npm install --save-dev style-loader

本文以webpack文章的demo為例,如果未閱讀上文竹勉,并且想了解完整過程請(qǐng)點(diǎn)擊回到上文
配置
webpack.config.js中配置這兩個(gè)工具

module.exports = {
    ...
    module: {
        rules: [
           ...
           { // 這里配置這兩個(gè)工具
                test: /\.css$/,
                exclude: /node_modules/,
                use: [ // 請(qǐng)注意這里對(duì)同一個(gè)文件引入多個(gè)loader的方法飞盆。
                    {
                        loader: "style-loader"
                    }, {
                        loader: "css-loader"
                    }
                ]
            }
        ]
    }
}

接下來(lái),在app文件夾里創(chuàng)建一個(gè)名字的main.css的文件次乓,對(duì)一些元素設(shè)置樣式

image.png

main.css文件內(nèi)填入樣式

body{
    background-color: red;
    border: 5px solid yellow;
}
ul, li{
    list-sytle:none;
}

然后我們要怎么用這個(gè)樣式呢吓歇?,我們知道我們的例子中有一個(gè)webpack的入口票腰,沒錯(cuò)那就是main.js城看,為了讓webpack能找main.css文件,我們要將這個(gè)樣式導(dǎo)入到main.js中杏慰,其它的模塊需要通過 import, require, url等與入口文件建立其關(guān)聯(lián)析命。
main.js文件修改如下:

import React from 'react';
import {render} from 'react-dom';
import App from './App';

import './main.css'; // 使用require導(dǎo)入css文件

render(<App />, document.getElementById('root'));

通常情況下,css會(huì)和js打包到同一個(gè)文件中逃默,并不會(huì)打包為一個(gè)單獨(dú)的css文件,不過通過合適的配置webpack也可以把css打包為單獨(dú)的文件的簇搅。

CSS module

CSS的規(guī)則都是全局的完域,任何一個(gè)組件的樣式規(guī)則,都對(duì)整個(gè)頁(yè)面有效瘩将,那么如果我們?cè)O(shè)置的相同class名稱較多的時(shí)候吟税,那么可想而知頁(yè)面會(huì)從在聲明現(xiàn)象,用一個(gè)比較官方的詞就是它會(huì)造成全局污染姿现。
CSS module功能就是將JS的模塊化思想帶入CSS中來(lái)肠仪,通過CSS模塊,所有的類名备典,動(dòng)畫名默認(rèn)都只作用于當(dāng)前模塊异旧,這樣做有效避免了全局污染。
接下來(lái)我們?cè)趤?lái)改動(dòng)下webpack.config.js配置文件

module.exports = {

    ...

    module: {
        rules: [
            ...
            {
                test: /\.css$/,
                use: [
                    {
                        loader: "style-loader"
                    }, {
                        loader: "css-loader",
                        options: {
                            modules: true, // 指定啟用css modules
                           // 指定css的嘻哈類名格式
                            localIdentName: '[name]__[local]--[hash:base64:5]'
                        }
                    }
                ]
            }
        ]
    }
}

我們?cè)赼pp文件夾下創(chuàng)建一個(gè)App.css文件提佣,并填入以下代碼來(lái)進(jìn)行一下測(cè)試

image.png

.root {
    height: 30px;
    background-color: green;
    margin-top: 20px;
    border: 2px solid blue;
}

App.css導(dǎo)入App.js

import React, {Component} from 'react'
import config from './config.json';

import styles from './App.css'; // 導(dǎo)入

class App extends Component{
    render(){
        return (
            <div className={styles.root}>
                {config[0].text}
            </div>
        )
    }
}
export default App

我們看下頁(yè)面運(yùn)行結(jié)果


image.png

image.png

CSS預(yù)處理器

SassLess之類的預(yù)處理器是對(duì)原生CSS的拓展吮蛹,它們?cè)试S你使用類似于variables,nesting,mixins,inheritance等不存在于CSS中的特性來(lái)寫CSS荤崇,CSS預(yù)處理器可以這些特殊類型的語(yǔ)句轉(zhuǎn)化為瀏覽器可識(shí)別的CSS語(yǔ)句。
以下是常用的CSS 處理loaders

  • Less Loader
  • Sass Loader
  • Stylus Loader

不過其實(shí)也存在一個(gè)CSS的處理平臺(tái)-PostCSS潮针,它可以幫助你的CSS實(shí)現(xiàn)更多的功能术荤,在其官方文檔可了解更多相關(guān)知識(shí)。

舉例來(lái)說(shuō)如何使用PostCSS每篷,我們使用PostCSS來(lái)為CSS代碼自動(dòng)添加適應(yīng)不同瀏覽器的CSS前綴

第一步 安裝postcss-loaderautoprefixer(自動(dòng)添加前綴的插件)

npm install --save-dev postcss-loader
npm install --save-dev autoprefixer

第二步 在根目錄新建postcss.config.js并添加如下代碼

image.png

module.exports = {
    plugins: [
        require('autoprefixer')
    ]
}

第三步webpack.config.js中配置babel-loader

module.exports = {

    ...

    module: {
        rules: [
            ...
            {
                test: /\.css$/,
                use: [
                    ...
                    {
                        loader: "postcss-loader"
                    }
                ]
            }
        ]
    }
}

最后 重新使用npm start打包瓣戚,你寫的css會(huì)自動(dòng)根據(jù)Can i use里的數(shù)據(jù)添加不同前綴了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末焦读,一起剝皮案震驚了整個(gè)濱河市子库,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吨灭,老刑警劉巖刚照,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異喧兄,居然都是意外死亡无畔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門吠冤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)浑彰,“玉大人,你說(shuō)我怎么就攤上這事拯辙」洌” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵涯保,是天一觀的道長(zhǎng)诉濒。 經(jīng)常有香客問我,道長(zhǎng)夕春,這世上最難降的妖魔是什么未荒? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮及志,結(jié)果婚禮上片排,老公的妹妹穿的比我還像新娘。我一直安慰自己速侈,他們只是感情好率寡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倚搬,像睡著了一般冶共。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天比默,我揣著相機(jī)與錄音幻捏,去河邊找鬼。 笑死命咐,一個(gè)胖子當(dāng)著我的面吹牛篡九,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播醋奠,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼榛臼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了窜司?” 一聲冷哼從身側(cè)響起沛善,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎塞祈,沒想到半個(gè)月后金刁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡议薪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年尤蛮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斯议。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡产捞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哼御,到底是詐尸還是另有隱情坯临,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布恋昼,位于F島的核電站看靠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏液肌。R本人自食惡果不足惜衷笋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矩屁。 院中可真熱鬧,春花似錦爵赵、人聲如沸吝秕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)烁峭。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間约郁,已是汗流浹背缩挑。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鬓梅,地道東北人供置。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像绽快,于是被迫代替她去往敵國(guó)和親芥丧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349