在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 相关文章推荐
初学Javascript的一些总结
Nov 03 Javascript
jquery图片放大功能简单实现
Aug 01 Javascript
JS中的数组的sort方法使用示例
Jan 22 Javascript
JS小游戏之宇宙战机源码详解
Sep 25 Javascript
javascript中tostring()和valueof()的用法及两者的区别
Nov 16 Javascript
拖动时防止选中
Feb 03 Javascript
浅谈js中的变量名和函数名重名
Feb 13 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
Apr 07 Javascript
微信小程序商城项目之购物数量加减(3)
Apr 17 Javascript
Angular4集成ng2-file-upload的上传组件
Mar 14 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
Aug 10 Javascript
Vue实现穿梭框效果
Sep 30 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
最省空间的计数器
2006/10/09 PHP
php 之 没有mysql支持时的替代方案
2006/10/09 PHP
PHP 压缩文件夹的类代码
2009/11/05 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
静态html文件执行php语句的方法(推荐)
2016/11/21 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
js 获取服务器控件值的代码
2010/03/05 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
2016/09/04 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
Python正规则表达式学习指南
2016/08/02 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
使用Python设计一个代码统计工具
2018/04/04 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
鱼油专家:Omegavia
2016/10/10 全球购物
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
企业治理工作自我评价
2013/09/26 职场文书
党员评议思想汇报
2014/10/08 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
幼儿园小班教师随笔
2015/08/14 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server
Golang ort 中的sortInts 方法
2022/04/24 Golang
Redis Lua脚本实现ip限流示例
2022/07/15 Redis