Webpack輕松入門(三)——圖片打包

我們知道,在Webpack中,js文件類型是能夠被識(shí)別并直接打包的,而其他文件類型(如CSS和圖片等)則需要通過特定的loader來進(jìn)行加載打包。

上一節(jié)我們講到如何使用css-loaderstyle-loader兩個(gè)loader來打包CSS代碼,這次我將繼續(xù)講解如何使用loader將圖片類型文件進(jìn)行打包處理。

一、上節(jié)回顧

為了讓大家思路更加明朗,我還是先將上一節(jié)結(jié)束時(shí)的目錄結(jié)構(gòu)和一些關(guān)鍵文件內(nèi)容展示一下吧。

目錄結(jié)構(gòu)

webpack.config.js:

module.exports = {
    entry: './src/scripts/index.js',   // 打包入口
    output: {
        path: __dirname + '/dist',    // 輸出路徑
        filename: 'scripts/index.js'     // 輸出文件名
    },
    module: {
        rules: [    // 其中包含各種loader的使用規(guī)則
            {
                test: /\.css$/,  // 正則表達(dá)式,表示打包.css后綴的文件
                use: ['style-loader','css-loader']   // 針對(duì)css文件使用的loader,注意有先后順序,數(shù)組項(xiàng)越靠后越先執(zhí)行
            }
        ]
    },
    watch: true    // 監(jiān)聽文件改動(dòng)并自動(dòng)打包
};

index.js:

var module = require('./module.js');
require('../css/style.css');

二、圖片打包

圖片打包關(guān)鍵要用到file-loaderurl-loader,其中url-loaderfile-loader功能基本一致,只不過url-loader能將小于某個(gè)大小的圖片進(jìn)行base64格式的轉(zhuǎn)化處理。

1. CSS中的圖片

比如,我現(xiàn)在在src目錄下新增一個(gè)images文件夾,再在images中添加一張圖片“1.jpg”。然后我在style.css中添加以下代碼:

html{ height: 100%; background: url("../images/1.jpg") no-repeat center;}

如果這時(shí)直接進(jìn)行打包,那么肯定會(huì)報(bào)錯(cuò),比如像這樣的:

第三行它提示你需要使用一個(gè)loader來處理圖片這種類型的文件,這時(shí),我們只需把file-loader裝上,并在webpack.config.js中添加相應(yīng)配置就ok了。

① 輸入命令安裝file-loader

npm i -D file-loader

② 在webpack.config.js中的rules數(shù)組中添加file-loader的相關(guān)配置

{
    test: /\.(png|jpg|gif|svg)$/,
    use: ['file-loader']
}

其實(shí)對(duì)于只有單個(gè)loader的,我們還可以將其簡(jiǎn)化成下面這樣:

{
    test: /\.(png|jpg|gif|svg)$/,
    loader: 'file-loader'
}

接下來,我們只需執(zhí)行npm start命令進(jìn)行打包即可。

雖然我們已經(jīng)將圖片但是打包后,我們會(huì)發(fā)現(xiàn)打包后的圖片名發(fā)生了變化:

那么如何才能保持圖片名不變,而且也能夠添加到指定目錄下呢?

我們只需要再添加一個(gè)options屬性即可:

{
    test: /\.(png|jpg|gif|svg)$/,
    loader: 'file-loader',
    options: {
        name: 'images/[name].[ext]'
    }
}

其中name屬性其實(shí)就是圖片打包后的路徑,其中包括圖片名([name])圖片格式([ext])。

此時(shí)打包后的dist目錄結(jié)構(gòu)如下:

2. JS中的圖片

file-loader能自動(dòng)識(shí)別CSS代碼中的圖片路徑并將其打包至指定目錄,但是JS就不同了,我們來看下面的例子。

// index.js
var img = new Image();
img.src = '../images/1.jpg';
document.body.appendChild(img);

如果不使用Webpack打包,正常情況下只要路徑正確圖片是能夠正常顯示的。然而,當(dāng)使用Webpack打包后,我們會(huì)發(fā)現(xiàn)圖片并未被成功打包到dist目錄,自然圖片也無法顯示出來。

這其實(shí)是因?yàn)閃ebpack并不知道'../images/1.jpg'是一張圖片,如果要正常打包的話需要先將圖片資源加載進(jìn)來,然后再將其作為圖片路徑添加至圖片對(duì)象。具體代碼如下:

// index.js
var imgSrc = require('../images/1.jpg');

var img = new Image();
img.src = imgSrc;
document.body.appendChild(img);

3. 淺談url-loader

除了使用file-loader對(duì)圖片進(jìn)行打包處理外,我們同樣也可以使用url-loader代替,另外我們還可以對(duì)小于某個(gè)大小的圖片進(jìn)行base64格式的轉(zhuǎn)化處理。

{
    test: /\.(png|jpg|gif|svg)$/,
    loader: 'url-loader',
    options: {
        name: './images/[name].[ext]',
        limit: 8192
    }
}

這里limit屬性的作用就是將小于8192B(8.192K)大小的圖片轉(zhuǎn)成base64格式,而大于這個(gè)大小的圖片將會(huì)以file-loader的方式進(jìn)行打包處理,例如:

當(dāng)然,如果不寫limit屬性,那么url-loader就會(huì)默認(rèn)將所有圖片轉(zhuǎn)成base64。

小貼士: 當(dāng)我們配置watch為true進(jìn)行打包后,Webpack會(huì)一直處于監(jiān)聽狀態(tài),然而當(dāng)更改webpack.config.js后我們?nèi)孕枰匦逻M(jìn)行打包操作,這時(shí)我們只需在控制臺(tái)簡(jiǎn)單的按下Ctrl+C后根據(jù)提示輸入字母y回車確定即可成功退出監(jiān)聽狀態(tài)。

本文重點(diǎn)總結(jié)

① 使用file-loader或url-loader可對(duì)圖片進(jìn)行打包操作
② url-loader可將圖片轉(zhuǎn)成base64格式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 Webpack 1.1 概念簡(jiǎn)介 1.1.1 WebPack是什么 1、一個(gè)打包工具 2、一個(gè)模塊加載工具 3...
    Kevin_Junbaozi閱讀 7,022評(píng)論 0 16
  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 webpack介紹和使用 一、webpack介紹 1、由來 ...
    it筱竹閱讀 11,458評(píng)論 0 21
  • 目錄第1章 webpack簡(jiǎn)介 11.1 webpack是什么? 11.2 官網(wǎng)地址 21.3 為什么使用 web...
    lemonzoey閱讀 1,828評(píng)論 0 1
  • 記得2004年的時(shí)候,互聯(lián)網(wǎng)開發(fā)就是做網(wǎng)頁,那時(shí)也沒有前端和后端的區(qū)分,有時(shí)一個(gè)網(wǎng)站就是一些純靜態(tài)的html,通過...
    陽陽陽一堆陽閱讀 3,456評(píng)論 0 5
  • 如果說女兒是爸爸上輩子的小情人的話,哥哥大概就是女兒這輩子的守護(hù)者了吧。有兄弟姐妹是一件很幸福的事情,兩個(gè)娃互相陪...
    康kang同學(xué)閱讀 401評(píng)論 0 1

友情鏈接更多精彩內(nèi)容