在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模块化编程(三)require.js的用法及功能介绍
Jan 17 Javascript
js实现快速分享功能(你的文章分享工具)
Jun 25 Javascript
jquery中选择块并改变属性值的方法
Jul 31 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
Jan 08 Javascript
javascript中的循环语句for语句深入理解
Apr 04 Javascript
使用递归遍历对象获得value值的实现方法
Jun 14 Javascript
vue.js入门教程之计算属性
Sep 01 Javascript
javascript简易画板开发
Apr 12 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
Dec 20 Javascript
基于jQuery实现简单人工智能聊天室
Feb 10 Javascript
基于rem的移动端响应式适配方案(详解)
Jul 07 Javascript
原生JS封装拖动验证滑块的实现代码示例
Jun 01 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
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
JavaScript中的类继承
2010/11/25 Javascript
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
javascript面向对象程序设计实践常用知识点总结
2019/07/29 Javascript
vue实现移动端拖动排序
2020/08/21 Javascript
在vue中axios设置timeout超时的操作
2020/09/04 Javascript
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
Python程序慢的重要原因
2020/09/04 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
新秀丽官方旗舰店:Samsonite拉杆箱、双肩包、皮具
2018/03/05 全球购物
教师师德教育的自我评价
2013/10/31 职场文书
期末总结的个人自我评价
2013/11/02 职场文书
师范学院教师自荐书
2014/01/31 职场文书
工会趣味活动方案
2014/08/18 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL
vue+echarts实现多条折线图
2022/03/21 Vue.js