亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

webpack入門學(xué)習(xí)手記(五)

AlphaWatch / 2015人閱讀

摘要:另外需要指定這個(gè)參數(shù),表示在配置的數(shù)值以下的圖片才進(jìn)行編碼,超過(guò)的不進(jìn)行處理。代碼如下所以過(guò)程就是引入了,然后進(jìn)行打包處理,生成和。目前這個(gè)入門學(xué)習(xí)手記到這里就結(jié)束了。完相關(guān)文章入門學(xué)習(xí)手記一入門學(xué)習(xí)手記二入門學(xué)習(xí)手記三入門學(xué)習(xí)手記四

本人微信公眾號(hào):前端修煉之路,歡迎關(guān)注。

前幾天朋友聚餐突然想到,再過(guò)不到半年時(shí)間,第一批20后即將出生。這種感覺就像是,現(xiàn)在的90后看60后~ 一不小心我們這些90后在20后的眼中就變成了上個(gè)世紀(jì)的人。o(╯□╰)o

回顧webpack這個(gè)系列,結(jié)合自己使用的一個(gè)過(guò)程,是時(shí)候結(jié)束一下了。

css優(yōu)化

我在項(xiàng)目中發(fā)現(xiàn),有些時(shí)候css會(huì)有重復(fù),或者不知道誰(shuí)寫的根本就沒有使用過(guò)的css樣式。如果文件較小,影響不是很大。但是我有一個(gè)項(xiàng)目,發(fā)現(xiàn)其中的css有9000多行!

對(duì)于有代碼潔癖的我來(lái)說(shuō),這是不能忍受的~要是文件小的話,我還有機(jī)會(huì)可以一行行的查找,將多余的代碼刪除。可惜這個(gè)文件內(nèi)容過(guò)多。好在找到了一個(gè)webpack插件mini-css-extract-plugin,這個(gè)插件結(jié)合purifycss-webpack使用,就可以滿足我的需求,將功能交給webpack去做。

mini-css-extract-plugin

mini-css-extract-plugin這個(gè)插件可以在webpack plugins中查看更多配置選項(xiàng)。這里我先只使用最簡(jiǎn)單的配置項(xiàng)。

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

plugins: [
    new MiniCssExtractPlugin({          // css文件抽離
        filename: "css/[name].min.css",    // 指定抽離之后文件的名字和并且在css路徑之下
        chunkFilename: "css/[id].min.css",
    }),
],
module: {
    rules: [
        {
            test: /.css$/, // 因?yàn)槲翼?xiàng)目中只有css代碼,所以正則只寫css
            use: [
                {
                    loader: MiniCssExtractPlugin.loader, // 指定使用mimi-css-extract-plugin
                    options: {
                        publicPath: "../",
                        hmr: process.env.NODE_ENV === "development",    // 只在開發(fā)環(huán)境下開啟hmr
                    },
                },
                "css-loader",        // 使用css-loader
            ],
        }
    ]
}
purifycss-webpack

purifycss-webpack這個(gè)插件可以去npm 官網(wǎng)查看更多配置項(xiàng)。

注:如果打開purifycss-webpack這個(gè)插件的npm說(shuō)明,頁(yè)面中會(huì)提示使用extract-text-webpack-plugin這個(gè)插件,并且示例代碼也是用這個(gè)插件演示的。但其實(shí)這個(gè)插件已經(jīng)廢棄了。官網(wǎng)推薦的使用就是上面使用的mini-css-extract-plugin這個(gè)插件。
const glob = require("glob");    // 這里一定要安裝glob-all這個(gè)插件而不是glob
const PurifyCSSPlugin = require("purifycss-webpack");

new PurifyCSSPlugin({       // css 文件去重
    paths: glob.sync(path.join(__dirname, "index.html")) // 指定html頁(yè)面,也可以使用通配符*進(jìn)行匹配全部html
})

purifycss-webpackmini-css-extract-plugin兩者結(jié)合使用,才能實(shí)現(xiàn)將css去重。

optimize-css-assets-webpack-plugin

去重實(shí)現(xiàn)以后,文件縮減了不少,可是我還不滿足。因?yàn)槲蚁朐诰€上使用壓縮的css,進(jìn)一步縮小文件的大小,節(jié)省用戶流量。如果自習(xí)閱讀剛才文檔,會(huì)發(fā)現(xiàn)MiniCssExtractPlugin這個(gè)插件之中有提到生成環(huán)境下使用壓縮css和js的插件。

所以我就直接使用就好了。

const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const TerserJSPlugin = require("terser-webpack-plugin");

 optimization: {
     minimizer: [new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})],   // js壓縮和css 壓縮
 }
圖片優(yōu)化 url-loader

css提取去重、css壓縮完成之后,又發(fā)現(xiàn)可以進(jìn)一步優(yōu)化的地方。網(wǎng)站中一般都會(huì)使用一些小圖標(biāo)和logo,有些小圖標(biāo)會(huì)做成雪碧圖,有些并不會(huì)。后來(lái)通過(guò)搜索,發(fā)現(xiàn)其實(shí)可以將一些足夠小的小圖標(biāo)制作成base64,將小圖標(biāo)寫到css文件中,從而減少http請(qǐng)求數(shù)量。如果手動(dòng)去做這個(gè)過(guò)程,是比較繁瑣的。還好找到了url-loader這個(gè)插件。插件詳細(xì)配置可以看webpack Loaders

module: {
        rules: [
            {
                test: /.(png|jpe?g|gif|svg)$/i,    // 匹配的圖片文件類型
                use: [
                    {
                        loader: "url-loader",
                        options: {
                            limit: 1024,  // 將1024以下的圖片制作成base64圖片,超過(guò)的不處理
                            name: "[name].[ext]",
                            outputPath: "img/",
                            publicPath: "../img/"   // 指定這個(gè)地址之后,css中的background才會(huì)變成了base64~,并且路徑使用的是這個(gè)路徑
                        },
                    }
                ]
            }
       ]
}

需要說(shuō)明的是,我修改了以下正則/.(png|jpe?g|gif|svg)$/i,這樣jpgjpeg就都能匹配到了。另外需要指定limit這個(gè)參數(shù),表示在limit配置的數(shù)值以下的圖片才進(jìn)行base64編碼,超過(guò)的不進(jìn)行處理。

在這個(gè)過(guò)程中,遇到的問(wèn)題就是,如果圖片沒有base64,就會(huì)造成背景圖片background中引用的url地址不正確,導(dǎo)致圖片引用失敗。后來(lái)經(jīng)過(guò)調(diào)試發(fā)現(xiàn),指定options.publicPath這個(gè)屬性,就可以正確引用了。

image-webpack-loader

處理完小圖標(biāo),我想到需要處理一下大圖片。因?yàn)槿绻麅H僅處理了小圖標(biāo),影響似乎并不大。真正占流量的其實(shí)是圖片。其實(shí)在做項(xiàng)目的時(shí)候,會(huì)將png圖片進(jìn)行一遍壓縮。但是我之前是使用的在線工具?,F(xiàn)在我想使用打包工具,自動(dòng)化進(jìn)行處理。

image-webpack-loader可以壓縮png、jpeg、gif、webp、svg。可以分別指定不同類型圖片的壓縮質(zhì)量。

                    {
                        loader: "image-webpack-loader",
                        options: {
                            mozjpeg: {
                                progressive: true,
                                quality: 65
                            },
                            // optipng.enabled: false will disable optipng
                            optipng: {
                                enabled: false,
                            },
                            pngquant: {
                                quality: "65-90",
                                speed: 4
                            },
                            gifsicle: {
                                interlaced: false,
                            },
                            // the webp option will enable WEBP
                            webp: {
                                quality: 75
                            }
                        }
                    }

使用完這個(gè)插件之后,確實(shí)發(fā)現(xiàn)我的圖片縮小了不少。

整個(gè)配置

上面只是簡(jiǎn)單的羅列出來(lái)了需要使用的各個(gè)loaderplugin。但是整個(gè)配置并不完整,完整的webpack-config.js代碼如下:

const path = require("path");
const glob = require("glob");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const TerserJSPlugin = require("terser-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const PurifyCSSPlugin = require("purifycss-webpack");

module.exports = {
    mode: "production",
    entry: {
        style: "./js/style.js",
    },
    optimization: {
        minimizer: [new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})],   // css 壓縮
    },
    plugins: [
        new CleanWebpackPlugin(),               // 文件清空
        new MiniCssExtractPlugin({          // css文件抽離
            filename: "css/[name].min.css",
            chunkFilename: "css/[id].min.css",
        }),
        new PurifyCSSPlugin({       // css 文件去重
            paths: glob.sync(path.join(__dirname, "index.html")),
        })
    ],
    module: {
        rules: [
            {
                test: /.css$/,
                use: [
                    {
                        loader: MiniCssExtractPlugin.loader,
                        options: {
                            publicPath: "../",
                            hmr: process.env.NODE_ENV === "development",
                        },
                    },
                    "css-loader",
                ],
            },
            {
                test: /.(png|jpe?g|gif|svg)$/i,
                use: [
                    {
                        loader: "url-loader",
                        options: {
                            limit: 1024,
                            name: "[name].[ext]",
                            outputPath: "img/",
                            publicPath: "../img/"   // 指定這個(gè)地址之后,css中的background才會(huì)變成了base64~,并且路徑使用的是這個(gè)路徑
                        },
                    },
                    {
                        loader: "image-webpack-loader",
                        options: {
                            mozjpeg: {
                                progressive: true,
                                quality: 65
                            },
                            // optipng.enabled: false will disable optipng
                            optipng: {
                                enabled: false,
                            },
                            pngquant: {
                                quality: "65-90",
                                speed: 4
                            },
                            gifsicle: {
                                interlaced: false,
                            },
                            // the webp option will enable WEBP
                            webp: {
                                quality: 75
                            }
                        }
                    }
                ],
            }
        ],
    },
    output: {
        filename: "[name].min.js",
        path: path.resolve(__dirname, "./dist")
    }
};

文件的entry入口是style.js

所有的打包文件目錄是通過(guò)output.path指定的,輸出到了dist目錄下。

在配置loader時(shí),可以在一個(gè)正則匹配下,配置多個(gè)loader。例如我先配置了url-loader,然后配置了image-webpack-loader。

在入口文件style.js中,其實(shí)什么事情也沒有做,只是引入了需要使用的css文件。代碼如下:

import style from "../css/style.css";

所以過(guò)程就是style.js引入了style.css,然后webpack進(jìn)行打包處理,生成style.min.jsstyle.min.css

整個(gè)的項(xiàng)目結(jié)構(gòu)如下:

以上就是我在項(xiàng)目中使用webpack的一個(gè)情況。目前這個(gè)入門學(xué)習(xí)手記到這里就結(jié)束了。

(完)

相關(guān)文章

webpack入門學(xué)習(xí)手記(一)

webpack入門學(xué)習(xí)手記(二)

webpack入門學(xué)習(xí)手記(三)

webpack入門學(xué)習(xí)手記(四)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/105817.html

相關(guān)文章

  • webpack入門學(xué)習(xí)手記(一)

    摘要:爭(zhēng)取早日能完全拋棄掉中文文檔,最終可以翻譯英文文檔,輸出英文文檔。待續(xù)相關(guān)文章入門學(xué)習(xí)手記一入門學(xué)習(xí)手記二入門學(xué)習(xí)手記三入門學(xué)習(xí)手記四 本人微信公眾號(hào):前端修煉之路,歡迎關(guān)注。 showImg(https://segmentfault.com/img/bVbk0kO?w=1150&h=599); 之前用過(guò)gulp、grunt,但是一直沒有學(xué)習(xí)過(guò)webpack。這兩天剛好有時(shí)間,學(xué)習(xí)了下...

    mengera88 評(píng)論0 收藏0
  • webpack入門學(xué)習(xí)手記(二)

    摘要:例如現(xiàn)在的入門學(xué)習(xí)手記系列。收到粉絲留言和打賞的喜悅。安裝上一篇入門學(xué)習(xí)手記一,主要是介紹了的核心概念,是整個(gè)學(xué)習(xí)過(guò)程的基礎(chǔ)知識(shí)。新生成的類似如下入門學(xué)習(xí)手記因?yàn)樯傻膬?nèi)容過(guò)多,我直接省略掉了。 showImg(https://segmentfault.com/img/bVbk5Nd?w=1150&h=599); 本人微信公眾號(hào):前端修煉之路,歡迎關(guān)注。 最近開始想要維護(hù)一個(gè)個(gè)人的公眾...

    Joyven 評(píng)論0 收藏0
  • webpack入門學(xué)習(xí)手記(四)

    摘要:本人微信公眾號(hào)前端修煉之路,歡迎關(guān)注。再過(guò)一天,就是年了,在這里祝大家新年快樂(lè),闔家歡樂(lè),萬(wàn)事大吉。 showImg(https://image-static.segmentfault.com/230/457/2304574665-5c1373e5a1763_articlex); 本人微信公眾號(hào):前端修煉之路,歡迎關(guān)注。 再過(guò)一天,就是2019年了,在這里祝大家新年快樂(lè),闔家歡樂(lè),萬(wàn)事...

    ygyooo 評(píng)論0 收藏0
  • webpack入門學(xué)習(xí)手記(三)

    摘要:本人微信公眾號(hào)前端修煉之路,歡迎關(guān)注。距離上一次更新這個(gè)系列,過(guò)去了兩天。最近實(shí)在是有點(diǎn)忙,沒有擠出時(shí)間整理。感覺日更還真是困難 showImg(https://segmentfault.com/img/bVbk5Nd?w=1150&h=599); 本人微信公眾號(hào):前端修煉之路,歡迎關(guān)注。 距離上一次更新這個(gè)系列,過(guò)去了兩天。最近實(shí)在是有點(diǎn)忙,沒有擠出時(shí)間整理。感覺日更還真是困難

    rozbo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<