webpack图片打包(2)

webpack只认识js文件和JSON文件,所以打包的时候默认是会对这两种类型的文件进行打包。但实际的项目中,除了js和JSON,还有css, img等文件。
这些文件就需要依赖loader来进行编译然后才能被浏览器识别并渲染出来。loader就是文件打包的一种解决方案。

下面我们要认识的是:

图片打包

先来说图片打包,现在看下目录结构,新建images文件夹,随便下载一张图片放进去:

webpackdemo
|- dist
|- node-modules
|- src
+    |- images
+        |- 1.jpg
|- index.html
|- index.js
|- package.json
|- package-lock.json

在index.js文件中添加如下内容,目的是将图片引入进来
index.js

+import yimg from "./images/1.jpg"   //先将js引入进来
window.onload = function(){
	
	var dom = document.createElement('div');
	var root = document.getElementById('root');
	dom.innerHTML = '这是我的测试博客';
	
+	var image = new Image();    //创建img标签
+	image.src = yimg;           // 将img的src属性设置成我们引入的图片

	root.appendChild(dom);
+	root.append(image);
}

由于webpack默认不认识以jpg/png 这些后缀名结尾的文件,所以要在webpack.config.js中配置loader。修改webpack.config.js文件,
这里处理图片文件用file-loader。

webpack.config.js

var path = require('path');

module.exports = {
    mode: "development",
    entry: {
        main: './src/index.js',
    },
+    module: {      //是配置我们的模块规则
+       rules: [{    //rules里面可以配置各种文件处理的规则
+           test: /\.jpg|png|jpeg|gif$/,     //匹配以jpg|png|jpeg|gif结尾的文件
+           use: [{             //使用的loader
+                   loader: 'file-loader',    //这里用file-loader来处理图片
+                   options: {                //options里面可以配置详细的处理信息
+                       name: '[name].[ext]?[hash]',     //  打包文件名
+                       publicPath: './dist/img',        //  打包的公共路径(ps:默认是在output.path下面)
+                       outputPath: 'img',               //  打包的文件放在img文件夹内。比如默认打包出来是在 dist/1.img。设置outpurpath就是dist/img/1.jpg
+                   }
+               },
+           ]
+       }]
+    },
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    }
}

fle-loader配置完成后,我们需要安装file-loader, npm install file-loader --save-dev 或者 npm install file-loader -D 都可以:

npm install file-loader --save-dev

安装完成之后,就可以在命令行输入我们之前配置好的命令:

npm run dev

这是打包完成目录及效果, 这个时候img被单独打包成一个文件:在这里插入图片描述在这里插入图片描述
file-loader 打包的图片会被直接img引用,页面渲染的时候会发送请求。如果图片很小。页面中又有很多的时候时候,是很浪费下载通道的。
这个时候我们可以用url-loader
url-loader: url-loader 功能类似于 file-loader,但是在文件大小(单位 byte)低于指定的限制时,可以返回一个 DataURL。

现在我们改下配置:
webpack.config.js

var path = require('path');

module.exports = {
    mode: "development",
    entry: {
        main: './src/index.js',
    },
    module: {      //是配置我们的模块规则
       rules: [{    //rules里面可以配置各种文件处理的规则
           test: /\.jpg|png|jpeg|gif$/,     //匹配以jpg|png|jpeg|gif结尾的文件
           use: [{             //使用的loader
+                   loader: 'url-loader',    //这里用url-loader来处理图片
                    options: {                
                        name: '[name].[ext]?[hash]',     
                        publicPath: './dist/img',        
                        outputPath: 'img',               
+                       limit: 204800,                   //  当打包的图片文件小于204800Byte时, 将图片编译成base64的形式,进行打包。如果大于204800Byte时,则使用file-loader进行打包
                    }
              },
           ]
       }]
    },
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    }
}

现在我们看在使用url-loader打包的效果,我们用的图片是45830Byte。所以图片会被打包进bundle.js里,不会被单独的打包成一个文件。在页面上我们可以看到img的路径是一个base64的字符串:
在这里插入图片描述
在这里插入图片描述
图片打包常用的就file-loader 和 url-loader 了,更多的可以查文档:https://www.webpackjs.com/loaders/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值