在Webpack中用url-loader处理图片和字体的问题


Posted in Javascript onApril 28, 2020

Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。

一、处理图片文件

默认webpack无法处理css文件中的url地址 在打包时会报错
无论是图片还是字体库 只要是url地址 都无法处理

在Webpack中用url-loader处理图片和字体的问题

解决方法:

在项目根目录下输入cnpm i url-loader file-loader -D
安装url-loader和file-loader
(url-loader内部依赖于file-loader)

然后在配置文件webpack.config.js中进行配置loader

var path=require("path")
var htmlWebpackPlugin=require("html-webpack-plugin")

module.exports={
 entry:path.join(__dirname,"./src/main.js"),
 output:{
 path:path.join(__dirname,"./dist"),
 filename:"bundle.js"
 },
 // 所有webpack插件的配置节点
 plugins:[
 new htmlWebpackPlugin({
  template:path.join(__dirname,"./src/index.html"),
  filename:"index.html"
 })
 ],
 // 配置第三方loader模块
 module:{
 rules:[
  // 第三方模块的匹配规则
  {test:/\.css$/,use:["style-loader","css-loader"]}, // 处理css文件的loader
  {test:/\.jpg|png|gif|bmp|jpeg$/,use:"url-loader"} // 处理图片url的loader
 ]
 }
}

使用url-loader打包之后 在页面中 默认会将路径以base64编码 减少图片的二次请求

关闭默认的以base64编码:

进行配置:
给url-loader传参 格式和网页url地址传参完全一致 在url-loader后面加问号传递参数即可
属性名:limit
设定一个大小范围 当图片大于或等于给定的limit值(单位byte) 则不将url转换为base64格式 反之进行转换
格式:{test:/\.jpg|png|gif|bmp|jpeg$/,use:"url-loader?limit=图片大小"}

如何查看图片大小:

右击图片 - 属性

在Webpack中用url-loader处理图片和字体的问题

:若图片长度大于三位 每三位要以逗号进行分隔
496886要写成496,886
例:{test:/\.jpg|png|gif|bmp|jpeg$/,use:"url-loader?limit=496,886"}

若不进行base64的转换

图片的名称会默认变成一串Hash字符串 以防止图片重名

可通过配置 不使用默认的改名为Hash字符串:
在url-loader后面加上name=[name].[ext]即可
[name]意为:之前是什么名称 打包之后也叫什么名称
[ext]意为:之前是什么后缀名 打包之后也叫什么后缀名

例:{test:/\.jpg|png|gif|bmp|jpeg$/,use:"url-loader?limit=496,886&name=[name].[ext]"}

否则 由于打包后的url引用的直接是文件名.后缀名的格式 若有重名的图片 即使不在同一个文件夹下
也会出现引入的图片重复

为避免此问题 需要将名称改为不重复的

既要不改文件名 又要避免图片重复问题
可配置为:{test:/\.jpg|png|gif|bmp|jpeg$/,use:"url-loader?limit=496,886&name=[hash:8]-[name].[ext]"}
name=[hash:8]-[name].[ext]的意思是:在图片前面带上32位hash值的前8位 中间用短横杠进行连接 具体的hash值长度可根据需要设置 但不能超过32 因为hash值最大只有32位

二、处理字体文件

在main.js里引入字体文件:

若通过路径的形式引入node_modules中相关的文件 可省略node_modules
若不写node_modules 默认会从node_modules里查找

例:
bootstrap.css文件在node_modules/bootstrap/dist/css下
但在引入的时候 可以这么写:

import "bootstrap/dist/css/bootstrap.css"

然后 同样 在webpack.config.js中进行配置即可:
字体文件也是使用url-loader进行处理

var path=require("path")
var htmlWebpackPlugin=require("html-webpack-plugin")

module.exports={
 entry:path.join(__dirname,"./src/main.js"),
 output:{
 path:path.join(__dirname,"./dist"),
 filename:"bundle.js"
 },
 // 所有webpack插件的配置节点
 plugins:[
 new htmlWebpackPlugin({
  template:path.join(__dirname,"./src/index.html"),
  filename:"index.html"
 })
 ],
 // 配置第三方loader模块
 module:{
 rules:[
  // 第三方模块的匹配规则
  {test:/\.css$/,use:["style-loader","css-loader"]},
  {test:/\.jpg|png|gif|bmp|jpeg$/,use:"url-loader?limit=496,886&name=[hash:8]-[name].[ext]"},
  {test:/\.ttf|eot|svg|woff|woff2$/,use:"url-loader"} // 处理字体文件的loader
 ]
 }
}

到此这篇关于在Webpack中用url-loader处理图片和字体的文章就介绍到这了,更多相关在Webpack中用url-loader处理图片和字体内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JQuery给元素添加/删除节点比如select
Apr 02 Javascript
JS 两个字符串时间的天数差计算
Aug 25 Javascript
jQuery中用dom操作替代正则表达式
Dec 29 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
Jan 10 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
Jan 12 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
May 17 Javascript
关于Ajax的原理以及代码封装详解
Sep 08 Javascript
Vue的elementUI实现自定义主题方法
Feb 23 Javascript
JavaScript实现的简单加密解密操作示例
Jun 01 Javascript
JavaScript创建对象方法实例小结
Sep 03 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
May 14 jQuery
Vue 实现简易多行滚动"弹幕"效果
Jan 02 Javascript
react PropTypes校验传递的值操作示例
Apr 28 #Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
Apr 28 #Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
Apr 27 #Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
Apr 27 #Javascript
react组件基本用法示例小结
Apr 27 #Javascript
react基本安装与测试示例
Apr 27 #Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
Apr 27 #Javascript
You might like
php面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
php笔记之常用文件操作
2010/10/12 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
关于laravel框架中的常用目录路径函数
2019/10/23 PHP
Javascript 类型转换方法
2010/10/24 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
详解redux异步操作实践
2018/08/15 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
vue+moment实现倒计时效果
2019/08/26 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
详解详解Python中writelines()方法的使用
2015/05/25 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
python logging日志模块以及多进程日志详解
2018/04/18 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
教师的实习鉴定
2013/12/15 职场文书
简历自我评价模版
2014/01/31 职场文书
美容院经理岗位职责
2014/04/03 职场文书
法制宣传教育方案
2014/05/09 职场文书
师德承诺书2015
2015/04/28 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL