webpack(6)webpack處理圖片
圖片處理url-loader(webpack5之前的處理方式)
在項目開發中,我們時長會需要使用到圖片,比如在img
文件夾中有圖片test1.png
,然後在normal.css
中會引用到圖片
body{
background: url("../img/test1.png");
}
但是此時,我們直接使用webpack
打包是會報錯的,我們需要安裝url-loader
,它是用於將文件轉換為 base64
URI 的 loader
。
安裝命令如下:
npm install url-loader --save-dev
url-loader
功能類似於 file-loader
, 但是在文件大小(單位為位元組)低於指定的限制時,可以返回一個 DataURL
。
接着我們在webpack.config.js
中配置url-loader
的設置
module.exports = {
module: {
rules: [
{
test: /\.(png|jpg|gif|jpeg)$/i,
use: [
{
loader: 'url-loader',
options: {
limit: 8192,
},
},
],
},
],
},
};
此時,如果我們的圖片test1.png
的大小小於8192k,那麼就可以打包成功,但是如果我們的圖片大於8192k,此時就需要安裝file-loader
安裝命令如下:
npm install file-loader --save-dev
然後,在 webpack.config.js
配置中添加 loader
。例如:
module.exports = {
module: {
rules: [
{
test: /\.(png|jpe?g|gif)$/i,
use: [
{
loader: 'file-loader',
options: {
publicPath: "dist/"
}
},
],
},
],
},
};
注意:配置時如果你同時配置了url-loader
,一定要把url-loader
的配置注釋掉
此時如果我們進行打包,打包出來的圖片名字是隨機的哈希值字符串,例如1b959a13f661bd214696460400b8c8d0.png
,如果我們想自定義名字,則需要進行配置option
選項,具體參數可以參考官網
資源模塊
webpack5
之前我們處理靜態資源比如。圖片字體之類的資源的時候等,需要用到url-loader
,file-loader
,raw-loader
,webpack5
則放棄了這三個loader
,這三個loader
在github
上也停止了更新。
webpack5
使用四種新增的資源模塊(Asset Modules)
替代了這些loader
的功能。
asset/resource
將資源分割為單獨的文件,並導出url,就是之前的file-loader
的功能.asset/inline
將資源導出為dataURL
(url(data:))的形式,之前的url-loader
的功能.asset/source
將資源導出為源碼(source code)
. 之前的raw-loader
功能.asset
自動選擇導出為單獨文件或者dataURL
形式(默認為8KB). 之前有url-loader
設置asset size limit
限制實現。
案例
我們這裡以assert/inline
為例子,進行配置
const path = require('path')
module.exports = {
entry: './src/main.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
module: {
rules: [
{
test: /\.png/,
type: 'asset/inline'
},
],
},
}
此時,再進行打包,png
格式的圖片都會被作為 data URI
注入到 bundle
中。