webpack 学习笔记之七,图片处理.

2019-02-25  本文已影响0人  人话博客

在前端开发中,图片是经常使用到的资源.

在使用图片的时候,我们一般会有两种方式.

对于小图片而言,我们一般直接使用 base64 编码,把图片写入到 css 代码中.
这样的好处是可以减少一个http请求.

之前我们打包的是jscss 文件.

结构是从我们写代码的 app 目录,将所需要的资源打包进 dist 目标目录.

image.png

我们已经知道了如何将 .js|.css 文件,利用 webpack 工具打包到 dist 文件.

但开发的时候,又有很多图片等静态资源,我们如何基于 webpack

打包到目标目录中去呢?


新建一个基于webapck的项目.

有个点说一下

不管你干了什么!
只要代码里出现了 import require 或者在样式中使用了 url .
webpack 眼里,这些玩意都叫模块。
除了 .js|.json 外,其他的通过这些方式导入的模块
(不管你是.jpg,.css 还是.xxx 乱七八招的什么东西)
webpack 都不认识。
它不认识,就会去找看你有没有配置对应 xx.xx 模块(文件)的 loader.

step 1.

安装 url-loader & file-loader .
url-loader 依赖 file-loader

npm i --save-dev @url-loader@1.1.2 file-loader@2.0.0

step 2.

编写 .css 文件,在内部写上一段需要使用到背景图片的样式.

body {
  background-color: rgba(0, 0, 0, 0.9);
  background-image: url('../images/beijing.jpg');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
}

step 3.

webpack.config.js 中,定义这个处理图片文件的loader.

{
        test: /\.(jpg|jpeg|png|gif|svg|webp)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 1024 * 100, // 小于100kb --> url --> base64编码
              // 这里如果只写一个文件名,那么图片将打包到  entry.output.path 路径下,也就是 dist/name.ext
              // name: '[name].[ext]',// 大于100KB 把 url(xx) 替换成 ../images/[name].[ext]
              // 如果,这里写的名字包含路径,那么也是相对于 entry.ouput.path 路径
              // 同时这个名字将会作为生成的css中url中的图片地址.
              name:'images/[name].[ext]', // -> 存储路径是 dist/images/name.ext
              publicPath: '/webpack-demo-img/dist/' // 加上这个配置,就等于是 pulblicPath + name = css.url中的链接地址.
            }
          },

对于 url-loader 补充说明:(有个坑,关于为什么配置publicPath)

step 4.

运行 npm run build

image.png

step 5.

打开浏览器,查看效果.

image.png

对于图片尺寸大于 url-loader.options.limit 的图片,已经测试通过,并url链接也是对的.

那么现在添加一张小于 url-loader.options.limit(100KB) 的图片.

image.png

改写 index.html 文件和 .less 文件.

index.html
<div class="img"></div>

index.less
 .img {
    width: 200px;
    height: 200px;
    background-image: url('../images/1-44kb.jpg');
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
  }

重新运行 npm run build

查看结果

image.png

打开 webpack 打包生成的 style.css 文件.

image.png

url-loader 确实将小于 options.limit 值的图片文件设置成了 base64 编码,并写入到了 css 文件对应的 url 中了.

上一篇下一篇

猜你喜欢

热点阅读