webpack2使用ch10-处理图片(png jpg svg 等) 限制图片 压缩图片

Posted 码农的成长之路-Jeson

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack2使用ch10-处理图片(png jpg svg 等) 限制图片 压缩图片相关的知识,希望对你有一定的参考价值。

1 目录展示 安装依赖

 

"file-loader": "^0.11.1",
"image-webpack-loader": "^3.3.0",
"url-loader": "^0.5.8",

 

2 css中使用图片 

2.1  webpack.config.js

const webpack = require(\'webpack\'),
      htmlWebpackPlugin = require(\'html-webpack-plugin\'),
      path = require(\'path\');

module.exports = {
    entry: \'./src/app.js\',
    output: {
        path: path.resolve(__dirname, \'./dist\'),
        filename: \'js/[name]-[chunkhash].js\',
    },
    module: { //loader第三种使用方式 配置项设置 其他1引入 2cli
      loaders: [
          {   //解析.js
              test: \'/\\.js$/\',  //正则匹配.js文件
              loader: \'babel\',  //使用babel 要先安装 cnpm install --save-dev babel-loader babel-core
              exclude: path.resolve(__dirname, \'node_modules\'), //优化babel 排除
              include: path.resolve(__dirname, \'src\'),//优化babel 打包范围
              query: {
                  presets: [\'env\'] //使用方式之1 cnpm install --save-dev babel-preset-env 告诉babel如何处理
              }
          },
          {   //解析 .css
              test: /\\.css$/,
              loader: \'style-loader!css-loader!postcss-loader\' //style-loader!css-loader 解析使用
                                                               // css postcss-loader后端浏览器优化(加前缀)
                                                               //要先加载 postcss-loader写在后面
                                                               //?importLoaders=1 css import \'xxx.css\'
          },
          { //解析 .less
              test: /\\.less$/,
              loader: \'style-loader!css-loader!postcss-loader!less-loader\'
          },{ //解析 .html
              test: /\\.html$/,
              loader: \'html-loader\'
          },{ //解析 .tpl
              test: /\\.tpl$/,
              loader: \'ejs-loader\'
          },{ //解析 图片
              test: /\\.(png|jpg|gif|svg)$/,
              loader: \'file-loader\',
              query: {
                  name: \'assets/[name]-[hash:5].[ext]\'
              },
          }
      ]
    },
    plugins: [
        new htmlWebpackPlugin({
            filename: \'index.html\',
            template: \'index.html\',
            inject: \'body\'
        }),
        new webpack.LoaderOptionsPlugin({ //浏览器加前缀
            options: {
                postcss: [require(\'autoprefixer\')({browsers:[\'last 5 versions\']})]
            }
        }),
    ]
};

2.2 app.js

import Layer from \'./components/layer/layer.js\';
import \'./style/common.css\';


const  App = function () {
    const dom = document.getElementById(\'app\');
    let layer = new Layer();
    dom.innerHTML = layer.tpl({
        name: \'jeson\',
        arr: [\'张三\', \'李四\', \'王五\', \'赵六\']
    });
}

new App();

2.3 layer.js

import tpl from \'./layer.tpl\';
import \'./layer.less\';

function layer() {
    return {
        name: \'layer\',
        tpl: tpl
    }
};

export default layer;

2.4 layer.less

.layer{
  @w:100px;
  @h:200px;

  width:@w;
  height:@h;
  background-color:blue;

  div{
    width:@w - 50;
    hieght:@h - 100;
    background-color:red;
    display: flex;
    background:url(\'../../assets/girl1.jpg\');
  }
}

2.5 打包

2.6 效果

2.7 使用 url-loader

--url-loader 对图片大小进行限制 满足条件的转换为base64格式,大于limit 交给file-loader处理

2.7.1 webpack.config.js 修改

{ //解析 图片
              test: /\\.(png|jpg|gif|svg)$/,
              loader: \'url-loader\',
              query: {
                  limit: 20000, //20k 
                  name: \'assets/[name]-[hash:5].[ext]\' //图片编译后放置在文件夹assets下 [name]图片原名 [hase:5]5位的hash值 [ext]图片原类型
              }
 }

2.7.2 打包

2.7.3 查看

原图片 19.1k 小于20k

2.7.4 修改限制

 

{ //解析 图片
              test: /\\.(png|jpg|gif|svg)$/,
              loader: \'url-loader\',
              query: {
                  limit: 10000, //10k 
                  name: \'assets/[name]-[hash:5].[ext]\' //图片编译后放置在文件夹assets下 [name]图片原名 [hase:5]5位的hash值 [ext]图片原类型
              }
 }

2.7.5 再次打包

2.7.6 再次查看

 

 

2.8 压缩图片 image-webpack-loader

2.8.1 修改webpack.config.js

{ //解析 图片
              test: /\\.(png|jpg|gif|svg)$/,
              /*loader: \'url-loader\',
              query: {
                  limit: 10000, //20k
                  name: \'assets/[name]-[hash:5].[ext]\'
              }*/
              loaders: [ //写成loaders数组集合形式
                  \'url-loader?limit=10000&name=assets/[name]-[hash:5].[ext]\',
                  \'image-webpack-loader?bypassOnDebug&optimizationLevel=7&interlaced=false\'
              ]
          }

2.8.2 打包

2.8.3 查看

未压缩前 与源图片大小相同;

此时

 

3 项目根目录文件,index.html插入图片

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>

</head>

<body>
    <img src="src/assets/girl1.jpg" alt="">
    <div id="app"></div>
</body>
</html>

 

 没什么好设置的 可以自动转换

 

 4 组件中插入图片

 4.1 layer.tpl---引入路径是绝对路径不会出问题;相对路径需要用 ${require(\'xxx\')}

<div class="layer">
    <img src="${require(\'../../assets/girl1.jpg\')}"/>
    <div>this is <%= name %></div>
    <% for(let i=0;i<arr.length;i++){ %>

        <%= arr[i]  %>

    <% } %>
</div>

 

以上是关于webpack2使用ch10-处理图片(png jpg svg 等) 限制图片 压缩图片的主要内容,如果未能解决你的问题,请参考以下文章

webpack2使用ch1-目录说明

webpack2使用ch2-entry和output简要说明

webpack2使用ch3-自动化生成.html和内部引入的js自动更改

php缩放处理png和jpg图片

一种用于png图片处理的C/C++库lodepng的使用说明及踩坑记录

迅捷在线压缩如何压缩图片文件?压缩成png怎么操作?