webpack5處理圖片、圖標(biāo)字體、多媒體等靜態(tài)資源文件
在 webpack5 中內(nèi)置了 file-loader、url-loader、raw-loader, 可以直接通過配置實現(xiàn)常用功能。官網(wǎng)
一、搭建 webpack 基礎(chǔ)環(huán)境
初始化環(huán)境
npm init -y
安裝環(huán)境依賴
npm install webpack cross-env webpack-cli -D
在 package.json 中修改 scripts
"scripts": {
"dev": "cross-env NODE_ENV=development webpack --config ./webpack.config.js --watch --progress --color ",
"build": "cross-env NODE_ENV=production webpack --config ./webpack.config.js --progress --color "
},
新建入口文件 src/index.js
consle.log("hello world");
創(chuàng)建 webpack.config.js 配置文件
var path = require("path");
module.exports = {
entry: {
app: "./src/index.js",
},
output: {
path: path.resolve(__dirname, "dist"),
filename: "[name]-budle.js",
clean: true,
},
mode: process.env.NODE_ENV,
module: {
rules: [],
},
};打包測試
npm run dev npm run build
二、webpack5 處理圖片資源
安裝依賴
npm install style-loader css-loader -D
修改 webpack.config.js 配置文件
var path = require("path");
module.exports = {
entry: {
app: "./src/index.js",
},
output: {
path: path.resolve(__dirname, "dist"),
filename: "[name]-budle.js",
clean: true,
},
mode: process.env.NODE_ENV,
module: {
rules: [
{
test: /\.css$/,
use: [
{
loader: "style-loader",
},
{
loader: "css-loader",
},
],
},
],
},
};新建 src/assets/css/index.css
#app div:nth-child(1) {
width: 50px;
height: 50px;
background: url("../images/01.png") no-repeat;
background-size: 100% 100%;
}
#app div:nth-child(2) {
width: 50px;
height: 50px;
background: url("../images/02.png") no-repeat;
background-size: 100% 100%;
}
#app div:nth-child(3) {
width: 50px;
height: 50px;
background: url("../images/03.png") no-repeat;
background-size: 100% 100%;
}
新建入口文件 src/index.js
import "./assets/css/index.css";
新建 src/index.html 模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<script src="../dist/app-budle.js"></script>
</head>
<body>
<div id="app">
<div></div>
<div></div>
<div></div>
</div>
</body>
</html>
打包編譯
npm run build
在瀏覽器打開 src/index.html,查看結(jié)果
發(fā)現(xiàn)圖片可以正常渲染,在 dist 中可查看到打包后的圖片
配置打包輸出路徑,并配置靜態(tài)資源轉(zhuǎn) base64 的 maxSize,修改 webpack.config.js 配置文件
設(shè)置 type: "asset" ,當(dāng)指定靜態(tài)資源打包路徑時,parser.dataUrlCondition.maxSize: 8 * 1024 會轉(zhuǎn) base64 自動生效,需手動配置范圍
var path = require("path");
module.exports = {
entry: {
app: "./src/index.js",
},
output: {
path: path.resolve(__dirname, "dist"),
filename: "[name]-budle.js",
clean: true,
},
mode: process.env.NODE_ENV,
module: {
rules: [
{
test: /\.css$/i,
use: [
{
loader: "style-loader",
options: {
esModule: false,
},
},
{
loader: "css-loader",
},
],
},
{
test: /\.(png|jpe?g|gif|svg)$/i,
type: "asset",
parser: {
dataUrlCondition: {
maxSize: 1 * 1024, // 小于1kb轉(zhuǎn)base64,減少請求次數(shù)
},
},
generator: {
filename: "static/images/[hash:10][ext][query]", // 指定打包路徑和文件名
},
},
],
},
};三、webpack5 處理圖標(biāo)字體資源
修改 webpack.config.js
設(shè)置 asset/resource ,靜態(tài)資源文件打包時不會轉(zhuǎn) base64
var path = require("path");
module.exports = {
entry: {
app: "./src/index.js",
},
output: {
path: path.resolve(__dirname, "dist"),
filename: "[name]-budle.js",
clean: true,
},
mode: process.env.NODE_ENV,
module: {
rules: [
{
test: /\.css$/i,
use: [
{
loader: "style-loader",
options: {
esModule: false,
},
},
{
loader: "css-loader",
},
],
},
{
test: /\.(png|jpe?g|gif|svg)$/i,
type: "asset",
parser: {
dataUrlCondition: {
maxSize: 1 * 1024, // 小于1kb轉(zhuǎn)base64,減少請求次數(shù)
},
},
generator: {
filename: "static/images/[hash:10][ext][query]", // 指定打包路徑和文件名
},
},
{
test: /\.(ttf|woff|woff2?)$/i,
type: "asset/resource",
generator: {
filename: "static/iconfont/[hash:10][ext][query]",
},
},
],
},
};四、webpack5 處理視頻資源
修改 webpack.config.js
設(shè)置asset/resource ,靜態(tài)資源文件打包時不會轉(zhuǎn) base64
var path = require("path");
module.exports = {
entry: {
app: "./src/index.js",
},
output: {
path: path.resolve(__dirname, "dist"),
filename: "[name]-budle.js",
clean: true,
},
mode: process.env.NODE_ENV,
module: {
rules: [
{
test: /\.css$/i,
use: [
{
loader: "style-loader",
options: {
esModule: false,
},
},
{
loader: "css-loader",
},
],
},
{
test: /\.(png|jpe?g|gif|svg)$/i,
type: "asset",
parser: {
dataUrlCondition: {
maxSize: 1 * 1024, // 小于1kb轉(zhuǎn)base64,減少請求次數(shù)
},
},
generator: {
filename: "static/images/[hash:10][ext][query]",
},
},
{
test: /\.(ttf|woff|woff2?)$/i,
type: "asset/resource",
generator: {
filename: "static/iconfont/[hash:10][ext][query]",
},
},
{
test: /\.(map3|map4|avi)$/i,
type: "asset/resource",
generator: {
filename: "static/media/[hash:10][ext][query]",
},
},
],
},
};到此這篇關(guān)于webpack5處理圖片、圖標(biāo)字體、多媒體等靜態(tài)資源文件的文章就介紹到這了,更多相關(guān)webpack5處理靜態(tài)資源文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Webpack常見靜態(tài)資源處理-模塊加載器(Loaders)+ExtractTextPlugin插件
- 詳解vue-cli與webpack結(jié)合如何處理靜態(tài)資源
- vue-cli與webpack處理靜態(tài)資源的方法及webpack打包的坑
- vue填坑之webpack run build 靜態(tài)資源找不到的解決方法
- 淺談webpack4 圖片處理匯總
- webpack 靜態(tài)資源集中輸出的方法示例
- 淺談 Webpack 如何處理圖片(開發(fā)、打包、優(yōu)化)
- 在Webpack中用url-loader處理圖片和字體的問題
- webpack實現(xiàn)靜態(tài)資源緩存的方法
- vue項目之webpack打包靜態(tài)資源路徑不準(zhǔn)確的問題
相關(guān)文章
面試判斷元素是否在可視區(qū)域中IntersectionObserver詳解
這篇文章主要為大家介紹了判斷元素是否在可視區(qū)域中IntersectionObserver面試詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
在VS?Code中使用Snippet?Craft擴(kuò)展提高編碼效率的過程詳解
這篇文章主要介紹了在VS?Code中使用Snippet?Craft擴(kuò)展提高編碼效率,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08
javascript權(quán)威指南 學(xué)習(xí)筆記之變量作用域分享
最近一直在看《javascript權(quán)威指南 第五版》,變量作用域這一章,看得真的有點累。不過,收獲還是多多。2011-09-09
一文詳解JavaScript中的replace()函數(shù)
replace方法的語法是stringObj.replace(rgExp, replaceText),其中stringObj是字符串(string),下面這篇文章主要給大家介紹了關(guān)于JavaScript中replace()函數(shù)的相關(guān)資料,需要的朋友可以參考下2023-01-01
javascript檢測瀏覽器的縮放狀態(tài)實現(xiàn)代碼
這篇文章主要介紹了javascript檢測瀏覽器的縮放狀態(tài)實現(xiàn)代碼,需要的朋友可以參考下2014-09-09
JavaScript中使用正則匹配多條,且獲取每條中的分組數(shù)據(jù)
該問題在使用Ajax遠(yuǎn)程獲取某網(wǎng)頁數(shù)據(jù)時經(jīng)常遇見 如果目標(biāo)頁面是XML,就好辦了,實用XMLDOM可以很輕松完成任務(wù)。2010-11-11
鍵盤上一張下一張兼容IE/google/firefox等瀏覽器
鍵盤上一張下一張的效果想必大家都有見到過吧,本文為大家介紹的這個兼容IE,google,firefox等主流瀏覽器2014-01-01

