Webpack5中使用file-loader和url-loader打包圖片

Hello 各位好伯顶,我是小豪。

最近在看 coderwhy 老師的 Vue3 視頻骆膝,進(jìn)度:Webpack 打包圖片資源祭衩。

在 Webpack5 之前,加載資源需要使用一些 loader阅签,比如 raw-loader掐暮、url-loader、file-loader政钟;

從 Webpack5 開始路克,我們可以直接使用資源模塊類型(asset module type),來(lái)替代上面的這些 loader养交。

如果你執(zhí)意要在 Webpack5 中使用 file-loader 或 url-loader 打包圖片資源精算,還是可以做到的,不過(guò)可能會(huì)踩一些坑碎连,這里就寫一下我遇到的問題灰羽,以及相應(yīng)的解決方法。

我用到的 Webpack 和 Webpack-cli 版本如下:

image.png

使用 file-loader 或 url-loader 之前,記得分別安裝對(duì)應(yīng)的 loader:

npm install file-loader -D
npm install url-loader -D

npm 命令最后的 -D 參數(shù)廉嚼,表示開發(fā)時(shí)依賴玫镐,等價(jià)于 --save-dev

先來(lái)看一下代碼的目錄結(jié)構(gòu):

代碼的目錄結(jié)構(gòu)

看一下 webpack.config.js 的配置:

// 導(dǎo)入 Node 的 path 模塊
const path = require('path');

module.exports = {
    entry: "./src/index.js",
    output: {
        path: path.resolve(__dirname, "./build"),
        filename: "bundle.js",
    },
    module: {
        rules: [{
          test: /\.css$/,
          use: [
            "style-loader",
            "css-loader"
          ]
        },{
          test: /\.(png|jpg|jpeg|gif|svg)$/,
          use: {
            loader: "file-loader",
            options: {
              esModule: false,  // file-loader 默認(rèn)使用 ES6 模塊解析怠噪,將其關(guān)閉恐似,啟用 CommonJS 模塊,不配置這個(gè)傍念,html 文件中的圖片路徑不對(duì)
              name: "img/[name]_[hash:6].[ext]"
            },
            type: 'javascript/auto'  // 不加這個(gè)配置矫夷,一張圖片打包后會(huì)生成兩張
          }
        }
      ]
    }
}

我在看 coderwhy 老師的視頻時(shí),視頻是去年錄制的捂寿,里面沒提到 esModule 和 type 字段口四,如果不配置這兩個(gè)字段,會(huì)遇到兩個(gè)問題:

  • html 文件中引用的圖片路徑不正確秦陋,路徑會(huì)包含文本 [object%20Module]
  • 一張圖片打包后會(huì)生成兩張蔓彩,而且其中一張無(wú)法打開,html 文件中剛好引用的就是這張圖片驳概,也會(huì)導(dǎo)致圖片無(wú)法正常顯示

對(duì)于第 1 個(gè)問題赤嚼,我在 StackOverflow 找到了一個(gè)回答,但我看完還是云里霧里哈顺又,貼一下圖:

來(lái)自 StackOverflow

接著來(lái)看一下我是如何使用圖片的——

element.js 中使用原生 js 往 html 插入圖片更卒,這里還分成兩種方式:

  • 一種是給 div 設(shè)置圖片背景,在 CSS 中使用 background-image: url()
  • 一種是在 img 元素的 src 屬性引入圖片
import '../css/image.css';

// 把圖片當(dāng)成模塊稚照,引入 element.js 中
import jyImage from '../img/jy.png'

// 給一個(gè) div 設(shè)置圖片背景
const bgDivEl = document.createElement("div");
bgDivEl.className = "bg-image";

document.body.appendChild(bgDivEl);

// 給 img 元素設(shè)置 src 屬性
const imgEl = document.createElement("img");
imgEl.src = jyImage;

document.body.appendChild(imgEl);

給 img 元素設(shè)置 src 屬性引入圖片蹂空,這里還比較特殊,需要把圖片當(dāng)成一個(gè)模塊引入 element.js 中果录。

給 div 設(shè)置圖片背景上枕,CSS 放在了 css 文件夾下的 image.css 中:

.bg-image {
  background-image: url("../img/qrcode.png");
  width: 200px;
  height: 200px;
}

到這,就算完成了所有配置弱恒,在終端中運(yùn)行 npm run build辨萍,打包后的圖片,在 html 中應(yīng)該就可以正常顯示了返弹。

希望對(duì)你有幫助锈玉。
我也是前端小白,有問題在評(píng)論區(qū)交流啦义起。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拉背,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子默终,更是在濱河造成了極大的恐慌椅棺,老刑警劉巖抡诞,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異土陪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)肴熏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門鬼雀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蛙吏,你說(shuō)我怎么就攤上這事源哩。” “怎么了鸦做?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵励烦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我泼诱,道長(zhǎng)坛掠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任治筒,我火速辦了婚禮屉栓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耸袜。我一直安慰自己友多,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布堤框。 她就那樣靜靜地躺著域滥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜈抓。 梳的紋絲不亂的頭發(fā)上启绰,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音资昧,去河邊找鬼酬土。 笑死,一個(gè)胖子當(dāng)著我的面吹牛格带,可吹牛的內(nèi)容都是我干的撤缴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼叽唱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼屈呕!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起棺亭,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤虎眨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗽桩,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岳守,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碌冶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片湿痢。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扑庞,靈堂內(nèi)的尸體忽然破棺而出譬重,到底是詐尸還是另有隱情,我是刑警寧澤罐氨,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布臀规,位于F島的核電站,受9級(jí)特大地震影響栅隐,放射性物質(zhì)發(fā)生泄漏塔嬉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一租悄、第九天 我趴在偏房一處隱蔽的房頂上張望邑遏。 院中可真熱鬧,春花似錦恰矩、人聲如沸记盒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纪吮。三九已至,卻和暖如春萎胰,著一層夾襖步出監(jiān)牢的瞬間碾盟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工技竟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冰肴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓榔组,卻偏偏與公主長(zhǎng)得像熙尉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搓扯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容