字体资源不要通过 url-loader 引入,若尺寸过小会被转为 DataURL。你可以通过 file-loader
来引入。
关于 file-loader
和 URL-loader
的差异可以看看这个: 从零构建 webpack 脚手架(基础篇)
// 资源路径
const genAssetSubPath = (dir: string) => `${dir}/[name].[hash:8]`;
/**
* 生成 url loader 选项
*/
const genUrlLoaderOptions = (dir: string) => ({
limit: 4096,
// 指定当目标文件的大小超过 limit 选项中设置的限制时, 使用的备用 loader 解析
fallback: {
loader: 'file-loader',
options: {
name: genAssetSubPath(dir),
},
},
});
// ========== rules ==========
// 图片资源
{
test: /.(png|jpe?g|gif|webp)(?.*)?$/,
use: {
loader: 'url-loader',
options: genUrlLoaderOptions('img'),
},
},
// svg 不转为 base64
// 除此之外还可以通过 raw-loader 获取 svg 的文本,但该选项会不会跟 file-loader 有冲突还需确认
{
test: /.(svg)(?.*)?$/,
use: {
loader: 'file-loader',
options: {
name: genAssetSubPath('img'),
},
},
},
// 媒体资源
{
test: /.(mp4|webm|ogg|mp3|wav|flac|aac)(?.*)?$/,
use: {
loader: 'url-loader',
options: genUrlLoaderOptions('media'),
},
},
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…