zoukankan      html  css  js  c++  java
  • webpack中的图片打包之路

    最近在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:  

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

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

    配置文件:

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

     注意这里的 ‘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中的图片也能被正确的打包了!

  • 相关阅读:
    登录的验证码
    分页效果
    弹出新窗口
    添加软键盘
    左侧菜单
    制作导航
    DEV第三方控件的GalleryControl控件
    div悬浮在屏幕的中间及点击按钮关闭弹出框
    鼠标经过图片时向前突出并放大图片
    UIImageView实现加载网络gif图片
  • 原文地址:https://www.cnblogs.com/hueralin/p/11408961.html
Copyright © 2011-2022 走看看