1. 程式人生 > >webpack4.x 處理less、sass檔案,分離編譯後的css,自動新增css字首,自動消除冗餘css 第七節

webpack4.x 處理less、sass檔案,分離編譯後的css,自動新增css字首,自動消除冗餘css 第七節

處理less檔案

我們建立一個src/less/a.less檔案

@a:red;

#div1{
    color: @a;

    ul{
        li{
            list-style: none;
            height:30px;
            line-height: 30px;
            border-bottom: 1px dashed #000;
        }
    }
}

這時我們就需要相應的loader了

1.安裝lessless-loader的模組

cnpm i less less-loader -D

2.引入

在入口檔案index.js中引入

import './less/a.less';

3.配置

module:{ //我寫一個module
    //配置一個rules(規則),rules是一個數組,裡面包含一條一條的規則
    rules:[
        {
            // test 表示測試什麼檔案型別
            test:/\.css$/,
            // 使用 'style-loader','css-loader'
            use:ExtractTextPlugin.extract({
                fallback:'style-loader', // 回滾
                use:'css-loader',
                publicPath:'../' //解決css背景圖的路徑問題
            })
        },
{ test:/\.less$/, use:['style-loader','css-loader','less-loader'] // 編譯順序從右往左 }, { test:/\.(png|jpg|gif)$/, use:[{ loader:'url-loader', options:{ // 這裡的options選項引數可以定義多大的圖片轉換為base64 limit:50000, // 表示小於50kb的圖片轉為base64,大於50kb的是路徑 outputPath:'images' //定義輸出的圖片資料夾 } }] } ] },

分離less編譯後的css檔案

module:{ //我寫一個module
    //配置一個rules(規則),rules是一個數組,裡面包含一條一條的規則
    rules:[
        {
            // test 表示測試什麼檔案型別
            test:/\.css$/,
            // 使用 'style-loader','css-loader'
            use:ExtractTextPlugin.extract({
                fallback:'style-loader', // 回滾
                use:'css-loader',
                publicPath:'../' //解決css背景圖的路徑問題
            })
        },
        {
            test:/\.less$/,
            use:ExtractTextPlugin.extract({ //分離less編譯後的css檔案
                fallback:'style-loader',
                use:['css-loader','less-loader']
            })
        },
        {
            test:/\.(png|jpg|gif)$/,
            use:[{
                loader:'url-loader',
                options:{ // 這裡的options選項引數可以定義多大的圖片轉換為base64
                    limit:50000, // 表示小於50kb的圖片轉為base64,大於50kb的是路徑
                    outputPath:'images' //定義輸出的圖片資料夾
                }
            }]
        }
    ]
},

處理sass檔案

1.安裝sass和sass-loader

cnpm i node-sass sass-loader -D

建立一個src/sass/a.sass檔案

$color:green;

#div2{
    color: $color;
}

-

module:{ //我寫一個module
    //配置一個rules(規則),rules是一個數組,裡面包含一條一條的規則
    rules:[
        {
            // test 表示測試什麼檔案型別
            test:/\.css$/,
            // 使用 'style-loader','css-loader'
            use:ExtractTextPlugin.extract({
                fallback:'style-loader', // 回滾
                use:'css-loader',
                publicPath:'../' //解決css背景圖的路徑問題
            })
        },
        {
            test:/\.less$/,
            use:ExtractTextPlugin.extract({ //分離less編譯後的css檔案
                fallback:'style-loader',
                use:['css-loader','less-loader']
            })
        },
        {
            test:/\.(sass|scss)$/,
            use:['style-loader','css-loader','sass-loader']
        },
        {
            test:/\.(png|jpg|gif)$/,
            use:[{
                loader:'url-loader',
                options:{ // 這裡的options選項引數可以定義多大的圖片轉換為base64
                    limit:50000, // 表示小於50kb的圖片轉為base64,大於50kb的是路徑
                    outputPath:'images' //定義輸出的圖片資料夾
                }
            }]
        }
    ]
},

自動新增css字首

postCss 前處理器

專門處理css平臺

1.下載

cnpm i postcss-loader autoprefixer -D

2.準備建一個 postcss.config.js檔案 配置postcss的

module.exports = {
    plugins:[
        require('autoprefixer') // 自動新增css字首
    ]
}

3.配置postcss-loader,自動新增css字首

module:{ //我寫一個module
    //配置一個rules(規則),rules是一個數組,裡面包含一條一條的規則
    rules:[
        {
            // test 表示測試什麼檔案型別
            test:/\.css$/,
            // 使用 'style-loader','css-loader'
            use:ExtractTextPlugin.extract({
                fallback:'style-loader', // 回滾
                use:[
                    {loader:'css-loader'},
                    {loader:'postcss-loader'} //利用postcss-loader自動新增css字首
                ],
                publicPath:'../' //解決css背景圖的路徑問題
            })
        },
        {
            test:/\.less$/,
            use:ExtractTextPlugin.extract({ //分離less編譯後的css檔案
                fallback:'style-loader',
                use:['css-loader','less-loader']
            })
        },
        {
            test:/\.(sass|scss)$/,
            use:['style-loader','css-loader','sass-loader']
        },
        {
            test:/\.(png|jpg|gif)$/,
            use:[{
                loader:'url-loader',
                options:{ // 這裡的options選項引數可以定義多大的圖片轉換為base64
                    limit:50000, // 表示小於50kb的圖片轉為base64,大於50kb的是路徑
                    outputPath:'images' //定義輸出的圖片資料夾
                }
            }]
        }
    ]
},

自動消除冗餘的css程式碼

使用Purifycss

1.下載

cnpm i purifycss-webpack purify-css -D

2.引入外掛

const PurifyCssWebpack = require('purifycss-webpack');

3.需要引入一個額外模組,glob掃描路徑

cnpm i glob -D

4.引入glob

const glob = require('glob');

5.在plugins裡面配置

plugins:[
    // Uglify是壓縮js,現在已經不需要了,只需要在script裡面寫成
    // "build": "webpack --mode production", 就自動壓縮額
    //new Uglify(),  
    new Webpack.HotModuleReplacementPlugin(),
    new HtmlWebpackPlugin({
        title:'Hello World',
        template: './src/index.html' //模板地址
    }),
    new ExtractTextPlugin('css/index.css'), //都提到dist目錄下的css目錄中,檔名是index.css裡面
    new PurifyCssWebpack({ //消除冗餘程式碼
        // 首先保證找路徑不是非同步的,所以這裡用同步的方法
        // path.join()也是path裡面的方法,主要用來合併路徑的
        // 'src/*.html' 表示掃描每個html的css
        paths:glob.sync(path.join(__dirname,'src/*.html')) 
    })
]