Webpack入门(三)——图片打包

我们知道,在Webpack中,js文件类型是能够被识别并直接打包的,而其他文件类型(如CSS和图片等)则需要通过特定的loader来进行加载打包。
上一节我们讲到如何使用css-loader和style-loader两个loader来打包CSS代码,这次我将继续讲解如何使用loader将图片类型文件进行打包处理。

一、上节回顾

为了让大家思路更加明朗,我还是先将上一节结束时的目录结构和一些关键文件内容展示一下吧。
目录结构
在这里插入图片描述
webpack.config.js:

module.exports = {
    entry: './src/scripts/index.js',   // 打包入口
    output: {
        path: __dirname + '/dist',    // 输出路径
        filename: 'scripts/index.js'     // 输出文件名
    },
    module: {
        rules: [    // 其中包含各种loader的使用规则
            {
                test: /\.css$/,  // 正则表达式,表示打包.css后缀的文件
                use: ['style-loader','css-loader']   // 针对css文件使用的loader,注意有先后顺序,数组项越靠后越先执行
            }
        ]
    },
    watch: true    // 监听文件改动并自动打包
};

index.js:

var module = require('./module.js');
require('../css/style.css');

二、图片打包

图片打包关键要用到file-loader或url-loader,其中url-loader与file-loader功能基本一致,只不过url-loader能将小于某个大小的图片进行base64格式的转化处理。
1. CSS中的图片
比如,我现在在src目录下新增一个images文件夹,再在images中添加一张图片“1.jpg”。然后我在style.css中添加以下代码:

html{ height: 100%; background: url("../images/1.jpg") no-repeat center;}

如果这时直接进行打包,那么肯定会报错,比如像这样的:
在这里插入图片描述
第三行它提示你需要使用一个loader来处理图片这种类型的文件,这时,我们只需把file-loader装上,并在webpack.config.js中添加相应配置就ok了。
① 输入命令安装file-loader

npm i -D file-loader

② 在webpack.config.js中的rules数组中添加file-loader的相关配置

{
    test: /\.(png|jpg|gif|svg)$/,
    use: ['file-loader']
}

其实对于只有单个loader的,我们还可以将其简化成下面这样:

{
    test: /\.(png|jpg|gif|svg)$/,
    loader: 'file-loader'
}

接下来,我们只需执行npm start命令进行打包即可。
虽然我们已经将图片但是打包后,我们会发现打包后的图片名发生了变化:
在这里插入图片描述
那么如何才能保持图片名不变,而且也能够添加到指定目录下呢?
我们只需要再添加一个options属性即可:

{
    test: /\.(png|jpg|gif|svg)$/,
    loader: 'file-loader',
    options: {
        name: 'images/[name].[ext]'
    }
}

其中name属性其实就是图片打包后的路径,其中包括图片名([name])和图片格式([ext])。
此时打包后的dist目录结构如下:
在这里插入图片描述
2. JS中的图片
file-loader能自动识别CSS代码中的图片路径并将其打包至指定目录,但是JS就不同了,我们来看下面的例子。

// index.js
var img = new Image();
img.src = '../images/1.jpg';
document.body.appendChild(img);

如果不使用Webpack打包,正常情况下只要路径正确图片是能够正常显示的。然而,当使用Webpack打包后,我们会发现图片并未被成功打包到dist目录,自然图片也无法显示出来。
这其实是因为Webpack并不知道’…/images/1.jpg’是一张图片,如果要正常打包的话需要先将图片资源加载进来,然后再将其作为图片路径添加至图片对象。具体代码如下:

// index.js
var imgSrc = require('../images/1.jpg');

var img = new Image();
img.src = imgSrc;
document.body.appendChild(img);

3. 浅谈url-loader
除了使用file-loader对图片进行打包处理外,我们同样也可以使用url-loader代替,另外我们还可以对小于某个大小的图片进行base64格式的转化处理。

{
    test: /\.(png|jpg|gif|svg)$/,
    loader: 'url-loader',
    options: {
        name: './images/[name].[ext]',
        limit: 8192
    }
}

这里limit属性的作用就是将小于8192B(8.192K)大小的图片转成base64格式,而大于这个大小的图片将会以file-loader的方式进行打包处理,例如:
在这里插入图片描述

当然,如果不写limit属性,那么url-loader就会默认将所有图片转成base64。

当我们配置watch为true进行打包后,Webpack会一直处于监听状态,然而当更改webpack.config.js后我们仍需要重新进行打包操作,这时我们只需在控制台简单的按下Ctrl+C后根据提示输入字母y回车确定即可成功退出监听状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webpack是一个主流的前端工程化解决方案,用于打包和构建前端应用程序。它可以将多个模块和资源打包成一个或多个bundle,以便在浏览器中加载。 要使用Webpack,你可以通过安装webpack命令行工具和配置文件来开始使用。在开发环境中,可以使用cheap-module-eval-source-map配置选项来生成源映射,而在生产环境中,可以使用none选项来关闭源映射。 为了更方便地使用Webpack,你可以安装和配置一些第三方插件。其中两个常用的插件是webpack-dev-server和html-webpack-plugin。webpack-dev-server可以在代码修改后自动进行打包和构建,而html-webpack-plugin可以自定义index.html页面的内容。 如果想快速入门Webpack,你可以按照以下步骤进行操作: 1. 安装Webpackwebpack命令行工具。 2. 在项目根目录下创建一个webpack.config.js文件,并配置Webpack的入口和出口文件以及其他需要的选项。 3. 在package.json中的scripts字段中增加命令,例如"build": "webpack"。 4. 运行npm run build命令,即可实现打包。 这样,你就可以通过Webpack打包和构建你的前端应用程序了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [超详细 WebPack 入门教程](https://blog.csdn.net/qq_43682422/article/details/124054740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [webpack快速入门教程](https://blog.csdn.net/weixin_57218747/article/details/117304221)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值