为什么要使用url-loader

在前面已经介绍了css文件可以使用第三方loader去加载。

在一个项目中,也不仅仅只有html,js和css文件,还有图片文件,字体文件等等。当我们给一个css样式设置背景图片时:



你会发现,webpack打包的时候会报错。



报错:无法处理这种格式的文件,解决这个问题就需要url-loader或者file-loader。

安装url-loader

  1. 安装url-loader,cnpm install url-loader file-loader –D
  2. 在webpack.config.js中配置第三方loader



    这个时候重新启动项目,你会发现图片被加载为:



    我们会发现,图片的url地址被默认转化为了base64格式,如果一张图片太大的话,这样的转换反而降低效率,我们希望在图片比较小的时候加载为base64,图片较大则加载原始图片。

    在webpack.config.js中如下配置:



    像在url上加参数一样给url-loader设置一个limit参数(单位字节),大于或等于给定的limit值,则不会被转为base64格式的字符串,如果小于给定的limit值,则会被转为base64字符串。



    我们可以发现图片的后缀已经是.png格式了,但是名称还不是图片原来的名称, 因为webpack在打包的时候防止名称重复,自动设置了hash名,如果想要使用图片原始的名称作为路径,则还需要给url-loader增加一个参数



    参数分析:

    • name: 文件的名称
    • hash-8: 取8位hash值作为文件名前缀
    • name: 使用图片原始的名称
    • ext:使用图片原始的后缀名

解释为什么webpack会自动给图片设置hash名,防止名称重复

如果我们在两个文件夹中分别引入两个图片名称的图片。如下所示



在html页面中新建两个div

在css样式中,分别引入这两张图片

看看webpack打包后的样式:



我们明明引入了两张不同的图片,但是他们却引入了同一张图片,因为webpack打包之后,图片会被存放在 / 目录下的内存中,仔细观察图片中的url地址,就会发现跟我们的在css样式中的引入路径并不一样,所以会出现引入同一张图片的问题。

解决问题:在url-loader中使用图片原始名称的时候,添加hash值来区别是不是同一张图片

(5)webpack中url-loader的使用的更多相关文章

  1. Webpack的详细配置,[Webpack中各种loader的安装配置]

    在使用webpack的时候,你是不是被以下这种报错所困扰: 注意看 黄色框中标注的 You may need an appropriate loader to handle this file typ ...

  2. 第五十一篇:webpack中的loader(二) --less-loader

    好家伙 先扩充一下知识点: 什么是.less文件? 作为一名前端开发的同学,很多时候我们都无法避免地要去写大量的 CSS 代码, 而且耗费的时间还不少,所以学习一种能够提升开发效率的 CSS 预处理器 ...

  3. 第五十篇: webpack中的loader(一) --css-loader

    好家伙, 1.webpack配置中devServer节点的常用配置项 devServer:{ //首次打包完成后,自动打开浏览器 open:ture, //在http协议中,如果端口号是80,则可以被 ...

  4. Vue系列之 => webpack的url loader

    安装: npm i url-loader file-loader -D  //url-loader内部依赖file-loader webpack.config.js const path = requ ...

  5. 如何在webpack中使用loader

    一.什么是loader loader 用于对模块的源代码进行转换.loader 可以使你在 import 或"加载"模块时预处理文件.因此,loader 类似于其他构建工具中“任务 ...

  6. webpack 中,loader、plugin 的区别

    loader 和 plugin 的主要区别: loader 用于加载某些资源文件. 因为 webpack 只能理解 JavaScript 和 JSON 文件,对于其他资源例如 css,图片,或者其他的 ...

  7. Webpack 2 视频教程 014 - 深入理解 Webpack 2 中的 loader

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  8. 如何在webpack中成功引用到图片?

    打包图片时,你可曾遇到在产出目录文件夹找不到图片,即便找到了,但是页面说引用不到资源?页面上或者文件中引用的图片地址不对? 一.在webpack中引入图片需要url-loader //webpack配 ...

  9. 在webpack中使用postcss之插件包precss

    precss是一个预处理css的插件包,集成了很多postcss插件的功能,比如嵌套,变量,继承,混合,循环,判断.下面来介绍如何在webpack中使用precss.一.新建项目1.新建package ...

  10. webpack配置常用loader加载器

    webapck中使用loader的方法有三种 使用loader之前必须运行安装 : npm install --save-dev xxx-loader (1)通过CLI : 命令行中运行 webpac ...

随机推荐

  1. 深度学习中损失函数之RMS和MES

    学校给我们一人赞助了100美元购买英文原版图书,几方打听后选择了PRML 即Pattern Recognition and Machine Learning.自从拆封这本书开始慢慢的品读,经常会有相见 ...

  2. 小师妹学JVM之:JDK14中JVM的性能优化

    目录 简介 String压缩 分层编译(Tiered Compilation) Code Cache分层 新的JIT编译器Graal 前置编译 压缩对象指针 Zero-Based 压缩指针 Escap ...

  3. SpringBoot 启动配置原理

    几个重要的事件回调机制 ApplicationContextInitializer SpringApplicationRunListener ApplicationRunner CommandLine ...

  4. LeetCode 79,这道走迷宫问题为什么不能用宽搜呢?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第48篇文章,我们一起来看看LeetCode当中的第79题,搜索单词(Word Search). 这一题官方给的难 ...

  5. XmlHttpRequest使用及“跨域”问题解决

    一. IE7以后对xmlHttpRequest 对象的创建在不同浏览器上是兼容的. 下面的方法是考虑兼容性的,实际项目中一般使用Jquery的ajax请求,可以不考虑兼容性问题. function g ...

  6. 主机Redis服务迁移到现有Docker Overlay环境

    记录最后一次对中型2C企业级项目的容器化改造 hello, 好久不见,之前文章记录了一个实战的2C分布式项目的改造过程,结果如下: 其中Redis并未完成容器化改造(目前是主机单点),本文记录将Red ...

  7. web之robots.txt

    什么是roots协议 robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被 ...

  8. 在 Spring Boot 中使用 HikariCP 连接池

    上次帮小王解决了如何在 Spring Boot 中使用 JDBC 连接 MySQL 后,我就一直在等,等他问我第三个问题,比如说如何在 Spring Boot 中使用 HikariCP 连接池.但我等 ...

  9. webstorm 调试 typescript

    { "compilerOptions": { "target": "es5", "outFile": "bin ...

  10. vue基础入门(2.3)

    2.3.样式绑定 2.3.1.绑定class样式 1.绑定单个class <!DOCTYPE html> <html lang="en"> <head ...