最近在Github上弄项目,需要搭建一个webpack开发环境。Emmm,是的,从0开始搭建一个项目确实不容易,光Webpack的坑就够我踩一路的了。这不,刚搭建到“图片打包”这里,就遇到了麻烦。最后找到了问题的源头,在mini-css-extract-plugin(抽离CSS代码为一个CSC文件的插件)这个插件上。

错误操作就不示范了,下面来探讨一下webpack中的图片打包方式。

1. 在JS中使用图片

  1. import logo from './images/logo.png'  // 引入图片资源并返回一个新的图片地址
  2. let img = new Image()
  3. img.src = './images/logo.png' // 错误!JS不会认为'./images/logo.png'一个资源,而是字符串
  4. img.src = logo

webpack中的相关配置

  1. {
  2. test: /\.(jpg|png|gif)$/,
  3. use: [{
  4. loader: 'url-loader',
  5. options: {
  6. outputPath: 'images/'
  7. limit: 100*1024
  8. }
  9. }]
  10. }

上面使用的是url-loader,该loader比file-loader更好的地方就是能根据图片的大小来决定是使用base64格式还是正常加载。

例如上面的配置,当图片小于100KB时使用base64格式输出,这样就可以避免一个http请求。

limit:属性值有三种类型:Number(限定最大值),Boolean(是否启用base64),String,默认为undefined

2. 在CSS中使用图片,例如:背景图片

这种方法的url-loader配置同上,但是有一个问题。如果你在配置CSS的过程中使用了mini-css-webpack-plugin这个插件来抽离CSS,那么一定要注意路径的问题,我就是在这上面踩了个大坑,费了不少时间。

CSS:

  1. body {
  2. background: url('../images/logo.png')
  3. }

通过相对路径引用了一张图片(css文件夹和images文件夹处于同一级)

配置文件:

  1. {
  2. test: /\.less$/,
  3. use: [{
  4. loader: MiniCssExtractPlugin.loader,
  5. options: {
  6. // 在这里配置publicPath,不然CSS里面的图片路径是以CSS目录为根目录的
  7. publicPath: '../'
  8. }},
          'css-loader',
          'postcss-loader',
          'less-loader'
      ]
  9. },

注意这里的 ‘publicPath’ ,当初我就是没有设置该属性,导致build后的CSS为

  1. {background: url(images/logo.png)}  // 明显路径错了
  2. {background: url(../image/logo.png)}  // 设置publicPath值为 '../'

这样,打包后的CSS中背景图片的引用就正确了。

3. 在HTML中引用图片

我们经常使用html-webpack-plugin插件来给项目设置一个HTML模板,所以有时我们会在模板中插入图片,但是webpack对HTML中的图片是无能为力的,因为img标签的src引入的图片没有被依赖,不会被打包,所以这时候我们需要使用 html-withimg-loader

webpack配置:

  1. {
  2. test: /\.html$/,
  3. use: 'html-withimg-loader'
  4. }

这样,html中的图片也能被正确的打包了!

webpack中的图片打包之路的更多相关文章

  1. 如何在react&webpack中引入图片?

    在react&webpack项目中需要引入图片,但是webpack使用的模块化的思想,如果不进行任何配置,而直接在jsx或者是css中使用相对路径来使用就会出现问题,在webpack中提供了u ...

  2. webpack中typeScript的打包配置

    2018年typescript发展的非常好,js是一门非常灵活的语言,所以一个功能,怎么写都能够写出来,但是这也会导致一个问题,不同人写js的方式不同,那么会导致同一个功能出现的代码风格会迥然不同.这 ...

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

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

  4. webpack快速入门——CSS中的图片处理

    1.首先在网上随便找一张图片,在src下新建images文件夹,将图片放在文件夹内 2.在index.html中写入代码:<div id="pic"></div& ...

  5. webpack快速入门——处理HTML中的图片

    在webpack中是不喜欢你使用标签<img>来引入图片的,但是我们作前端的人特别热衷于这种写法, 国人也为此开发了一个:html-withimg-loader.他可以很好的处理我们在ht ...

  6. webpack(四) --css样式及图片打包

    一.CSS样式打包 1. loader简介 由于Webpack打包入口目前只配置了一个index.js文件,那么其他需要被打包的文件都必须通过模块化方式引入该文件才行,而默认情况下,引入的文件必须是j ...

  7. vue-cil和webpack中本地静态图片的路径问题解决方案

    1 本地图片动态绑定img的src属性 一般我们在html中或者vue组件文件中引用图片是这样,这是不需要做特别处理的 我们将图片放入assets中或者重新建立个文件夹img什么的都可以,随意- 但是 ...

  8. 关于npm run build打包后css样式中的图片失效的问题(如background)

    平时run dev都能正常显示的css背景图片在npm run build打包后竟然不显示了(写在标签对中的图片都可以正常显示),而且dist/static/img目录下是确实有这张图片的,于是查看打 ...

  9. webpack中,css中打包背景图,路径报错

    css-loader: //打包样式中背景图 { test: /\.(png|jpg)$/, loader: "url-loader?limit=8192&name=images/[ ...

随机推荐

  1. Ubuntu16.04 重新安装误删的某个*.so文件

    在使用Ubuntu系统时,如果不小心将某个*.so文件删除,该如何重新安装呢? 如果直接使用命令:sudo  apt-get  install  *.so 可能会报错或者找不到这个*.so文件. 正确 ...

  2. css图像拼合技术(精灵图)

    CSS图像拼合技术 1.图像拼合 图像拼合技术就是单个图像的集合. 有很多图片的网页可能会需要很多时间来加载和生成多个服务器的请求. 使用图像拼合会降低服务器的请求数量,并节省带宽. 图像拼合实例 有 ...

  3. wrapper配置文件详解

    参考资料 http://www.tuicool.com/articles/jqMv2q 文件编码,每个配置文件起始位置必须指定该文件的编码格式 encoding=UTF-8 如果包含配置文件出现问题可 ...

  4. 对logistic回归分析的两重认识

    logistic回归,回归给人的直观印象只是要求解一个模型的系数,然后可以预测某个变量的回归值.而logistic回归在应用中多了一层含义,它经常应用于分类中.第一重认识:logistic是给真正的回 ...

  5. linux运维、架构之路-linux磁盘管理

    一.企业中磁盘选购: 1.线上的业务,用SAS磁盘 2.线下的业务,用SATA磁盘,磁带库 3.线上高并发.小容量(多人浏览力图片)的业务,SSD磁盘 4.根据数据的访问热度,智能分析分层存储,SAT ...

  6. ckeditor如何能实现直接粘贴把图片上传到服务器中?

    在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...

  7. Word文档粘贴到帝国CMS

    很多时候我们用一些管理系统的时候,发布新闻.公告等文字类信息时,希望能很快的将word里面的内容直接粘贴到富文本编辑器里面,然后发布出来.减少排版复杂的工作量. 下面是借用百度doc 来快速实现这个w ...

  8. java 中异常类

    算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeAr ...

  9. wangjunkai

    <!Doctype html><html lang="en"> <head> <meta http-equiv="Content ...

  10. C++ Map相同key是否覆盖问题分析

    C++的标准库关联容器map是不允许有key相同的键值对存在的.那么当key已经存在的情况下,我们再次插入相同的key,那么key的value会被覆盖吗? 测试代码: 测试结果: 从测试结果我们可以得 ...