在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 相关文章推荐
点击广告后才能获得下载地址
Oct 26 Javascript
jQuery 使用手册(二)
Sep 23 Javascript
JS实现模仿微博发布效果实例代码
Dec 16 Javascript
node.js中的console.timeEnd方法使用说明
Dec 09 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
Mar 22 Javascript
jquery解析XML及获取XML节点名称的实现代码
May 18 Javascript
BootStrap无限级分类(无限极分类封装版)
Aug 26 Javascript
Bootstrap企业网站实战项目4
Oct 14 Javascript
浅谈JavaScript find 方法不支持IE的问题
Sep 28 Javascript
pm2 部署 node的三种方法示例
Oct 20 Javascript
ajax跨域访问遇到的问题及解决方案
May 23 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
Aug 16 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
解决File size limit exceeded 错误的方法
2013/06/14 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
php读取文件内容的方法汇总
2015/01/24 PHP
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
JS异步文件分片断点上传的实现思路
2016/12/25 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
python检索特定内容的文本文件实例
2018/06/05 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
python3 实现口罩抽签的功能
2020/03/11 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
骆驼官方商城:CAMEL
2016/11/22 全球购物
泰国网上购物:Shopee泰国
2018/09/14 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
中科创达面试题
2016/12/28 面试题
node中使用shell脚本的方法步骤
2021/03/23 Javascript
经济国贸专业求职信
2014/06/18 职场文书
工地门卫岗位职责范本
2014/07/01 职场文书
2015年外联部工作总结
2015/04/03 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
培训班开班主持词
2015/07/02 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书