在使用webpack對項目進行打包時,圖片的引用遇到一些問題,整理一下webpack對圖片打包的思路。javascript
使用url-loader
加載器實現項目中的路徑解析。具體使用其用來打包圖片的過程以下:css
1. 安裝:npm i url-loader -D 2. webpack.config.js配置文件中添加處理規則: module:{ rules:[ { test: /\.(jpg|png|gif|bmp|jpeg)$/,//正則表達式匹配圖片規則 use: [{ loader:'url-loader', options:{ limit:8192,//限制打包圖片的大小: //若是大於或等於8192Byte,則按照相應的文件名和路徑打包圖片;若是小於8192Byte,則將圖片轉成base64格式的字符串。 name:'images/[name]-[hash:8].[ext]',//images:圖片打包的文件夾; //[name].[ext]:設定圖片按照原本的文件名和擴展名打包,不用進行額外編碼 //[hash:8]:一個項目中若是兩個文件夾中的圖片重名,打包圖片就會被覆蓋,加上hash值的前八位做爲圖片名,能夠避免重名。 } }]} ] }
1.css
中的背景圖片html
background-image:url(./images/img.jpg)
2.html
中<img>
標籤java
<img src="./imges/img.jpg">
3.js
中的路徑賦值webpack
const img=getElementByTagName('img')[0]; img.src="./imges/img.jpg"
web項目中圖片引用的三種方式中,按照url-loader
的配置步驟,css
中背景圖片、html
標籤引用都能順利打包,只有js
中出現問題。web
問題:在js中,路徑被當作字符串賦值給了src屬性,webpack也將其當作字符串直接解析,所以,將項目打包至目的文件夾後,圖片的路徑引用出現問題。正則表達式
例如:以下是一個項目的目錄結構,源文件都放在src
文件夾中,webpack打包以後的文件夾dist
。webpack將圖片路徑當作字符串打包以後,dist/index.html
與src/index.html
中的圖片引用路徑同樣,所以dist/index.html
就找不到圖片。npm
解決:將圖片路徑當作模塊載入---require
ui
const img=getElementByTagName('img')[0]; img.src=require("./imges/img.jpg")
至此,webpack可以正常打包css、html<img>、js中的圖片引用。編碼