在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 Mobile入门—多页面切换示例学习
Jan 08 Javascript
JQuery结合CSS操作打印样式的方法
Dec 24 Javascript
基于jquery插件实现拖拽删除图片功能
Aug 27 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
Aug 06 Javascript
Bootstrap常用组件学习(整理)
Mar 24 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
Jun 28 Javascript
Vue列表渲染的示例代码
Nov 01 Javascript
vue实现购物车抛物线小球动画效果的方法详解
Feb 13 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
Jun 04 Javascript
js实现随机点名器精简版
Jun 29 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
Nov 06 Javascript
JavaScript canvas实现文字时钟
Jan 10 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 传值赋值与引用赋值的区别
2010/12/29 PHP
php中引用符号(&)的使用详解
2013/11/13 PHP
php实现的CSS更新类实例
2014/09/22 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
菜单效果
2006/10/14 Javascript
用JavaScript调用WebService的示例
2008/04/07 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
Javascript 错误处理的几种方法
2009/06/13 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
Python3基础之函数用法
2014/08/13 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
Python控制台实现交互式环境执行
2020/06/09 Python
Python中Selenium模块的使用详解
2020/10/09 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
房地产开发项目建议书
2014/05/16 职场文书
2014年村委会工作总结
2014/11/24 职场文书
文言文辞职信
2015/02/28 职场文书
奖学金个人总结
2015/03/04 职场文书