最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • webpack打包图片资源

    正文概述 掘金(子落)   2021-04-02   459

    图片加载

    in Javascript

    webpack只能处理js模块,在js中加载图片模块时需要借助file-loader。如

    //index.js
    import photo from './../static/image/Chrome.png';
    const image = new Image()
    image.src = photo
    document.body.appendChild(image)
    

    webpack配置file-loader

    module.exports = {
      mode: 'production',
      module: {
        rules: [
          {
            test: /\.(png|jpe?g|gif)$/i,
            use: [
              {
                loader: 'file-loader',
                options: {
                  name: '[path][name].[ext]',
                  publicPath: 'www.txx.com',
                },
              },
              // 'image-webpack-loader'
            ],
          },
        ],
      }
    }
    

    file-loader 和 url-loader 的区别

    url-loader内部继承了file-loader,与file-loader不同的是:

    1. url-loader可以把较小的图片转化成base64数据,从而减少对图片资源的http请求。同时打包文件也会变大;
    2. 当图片大小超过设置的限制(limit)时,默认采用file-loader进行加载。fallback默认值“file-loader”;
    3. 所有file-loader的属性,url-loader均可以使用。例如publicPath设置图片公共地址(图片部署到CDN服务器)

    in CSS

    在css中使用图片时,如background直接指定图片路径即可。

    .root{
      width: 200px;
      height: 200px;
      background: url("./../static/image/webpack.jpg") 100%;
    }
    

    因为css-loader对css中引用的图片进行了处理

    in html

    html中通过 <img src=""> 标签直接使用图片时,需要借助html-withimg-loader。如

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <div id="root"></div>
      <img src="./../static/image/eslint.jpeg" >
    </body>
    </html>
    

    webpack配置loader

    module.exports = {
      mode: 'production',
      module: {
        rules: [
          {
            test: /\.(htm|html)$/,
            exclude: /node_modules/,
            use: 'html-withimg-loader',
          }
        ],
      }
    }
    

    同时,file-loader/url-laoder 的 esModule设置为false。自webpack2开始,内部就集成了tree shaking代码优化,只会加载引用了的模块,html的图片会被视作未引用的模块资源

    图片压缩

    进过以上配置,我们已经可以成功地打包图片资源了,接下来我们要对图片资源进行压缩,在页面加载时减少响应时间。

    目前主流的webpack图片压缩无非就是 image-webpack-loader 和 imagemin-webpack-plugin。一种是配置loader,一种是配置插件,参数配置也大同小异。个人倾向使用前者,下面就 image-webpack-loader 配置举例

    module.exports = {
      mode: 'production',
      module: {
        rules: [
          {
            test: /\.(png|jpe?g|gif)$/i,
            use: [
              {
                loader: 'file-loader',
                options: {
                  name: '[path][name].[ext]',
                  publicPath: 'www.txx.com',
                },
              },
              {
                loader: 'image-webpack-loader',
                options: {
                    disable: process.env.NODE_ENV !== 'production', //仅生产环境对图片进行压缩
                    pngquant: {
                      quality: [0.65, 0.90],
                      speed: 4
                    },
                }
              }
            ],
          },
        ],
      }
    }
    

    image-webpack-loader 参数配置参考

    雪碧图

    “雪碧图”又叫css精灵(css sprite),css图片合成技术。

    当我们在开发中需要用到很多小图片的时候,比如菜单icon,悬浮icon等,相信大部分开发者直观的做法是直接下载UI稿中的切图,在项目中引入使用。是,这样做没错,但是作为一个直接面向客户的开发者,我们对自己的产品必须严格要求,做到性能最优。

    假如我们的应用首屏需要加载很多小图片,也就是说除了html,js,css等请求外,还需要发送很多次http请求去下载图片资源,这显然会降低首屏加载速度,用户体验很差。那么,我们是否可以考虑把这些小图合并成一张大图,然后用css去定位截取使用呢?显然是可以的,这里我只提一下技术方案,不做具体实现demo了

    图片合成

    首先我们要把这些小图合成一张大图,然后写css样式去扣。听起来很复杂,哈哈哈别怕,社区很强大,牛逼的人也很多,早就有大佬写了一套完整的工具去帮我们完成这些操作。

    • webpack-spritesmith完成图片合并和对应css样式导出;
    • image-webpack-loader压缩图片

    起源地下载网 » webpack打包图片资源

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元