主题
静态资源处理
静态资源包括所有图片、视频、字体、svg等等资源
特别注意:
webpack不会处理绝对路径, 例如:
src="/static/excelTpl/xxx.xlsx"
只会原文输出若要进行路径拼接,拼接后的路径为string,需要用
require()
包裹
1. 复制public文件到dist
将已存在的单个文件或整个目录复制到 dist目录。
- 安装
bash
pnpm add -D copy-webpack-plugin
- 配置
js
const CopyPlugin = require('copy-webpack-plugin');
module.exports = {
plugins: [
new CopyPlugin({
patterns: [
{
from: path.resolve(__dirname, "../public"),
to: path.resolve(__dirname, "../dist"),
toType: "dir",
globOptions: {
ignore: ["*/index.html"], // 忽略index.html文件
},
},
],
}),
],
};
2. webpack5静态资源类型
asset
:webpack5通用资源处理类型,默认8kb一下的资源会被转成base64,也可以通过配置指定阈值大小asset/resource
:会将资源处理成单独文件,可以指定导出文件的路径以及命名asset/inline
:将资源转成base64asset/source
:直接将资源内容以字符串形式引入到 JavaScript 代码中。适用于像原始文本、源代码等资源,引入后可以直接使用。
3. 处理图片
js
{
test: /\.(png|jpe?g|gif|webp)$/i,
type: "asset", // 资源类型
generator: {
filename: "static/images/[name].[contenthash:6][ext]", // 图片文件名
},
parser: {
dataUrlCondition: {
maxSize: 10 * 1024, // 小于10kb的图片转为base64格式
},
},
},
4. 处理 svg
js
{
test: /\.(svg|ico)$/i,
type: "asset/resource", // svg和ico文件
generator: {
filename: "static/images/[name].[contenthash:6][ext]", // 图片文件名
},
},
5. 处理字体
js
{
test: /\.(woff2?|eot|ttf|otf)$/i, // 字体
type: "asset/resource", // 资源类型
generator: {
filename: "static/fonts/[name].[contenthash:6][ext]", // 字体文件名
},
},
6. 处理json
js
{
test: /\.json$/i,
type: "asset/resource", // json文件
generator: {
filename: "static/json/[name].[contenthash:6][ext]", // json文件名
},
},
7. 处理音视频
js
{
test: /\.(mp3|wav|flac|aac|ogg)$/,
type: "asset/resource", // 资源类型
generator: {
filename: "static/audio/[name].[contenthash:6][ext]", // 音频文件
},
},
{
test: /\.(mp4|avi|mkv|flv|wmv|3gp)$/,
type: "asset/resource", // 资源类型
generator: {
filename: "static/video/[name].[contenthash:6][ext]", // 视频文件名
},
},