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

简介: 我们知道,在Webpack中,js文件类型是能够被识别并直接打包的,而其他文件类型(如CSS和图片等)则需要通过特定的loader来进行加载打包。

我们知道,在Webpack中,js文件类型是能够被识别并直接打包的,而其他文件类型(如CSS和图片等)则需要通过特定的loader来进行加载打包。

上一节我们讲到如何使用css-loaderstyle-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-loaderurl-loader,其中url-loaderfile-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回车确定即可成功退出监听状态。

本文重点总结

① 使用file-loader或url-loader可对图片进行打包操作
② url-loader可将图片转成base64格式

相关文章
|
1天前
|
JavaScript
|
11天前
|
前端开发 开发者
在前端开发中,webpack 作为一个强大的模块打包工具,为我们提供了丰富的功能和扩展性
【9月更文挑战第1天】在前端开发中,Webpack 作为强大的模块打包工具,提供了丰富的功能和扩展性。本文重点介绍 DefinePlugin 插件,详细探讨其原理、功能及实际应用。DefinePlugin 可在编译过程中动态定义全局变量,适用于环境变量配置、动态加载资源、接口地址配置等场景,有助于提升代码质量和开发效率。通过具体配置示例和注意事项,帮助开发者更好地利用此插件优化项目。
38 13
|
17天前
|
缓存 前端开发 JavaScript
Webpack 模块解析:打包原理、构造形式、扣代码补参数和全局导出
Webpack 模块解析:打包原理、构造形式、扣代码补参数和全局导出
21 1
|
11天前
|
前端开发 JavaScript 开发者
Angular与Webpack协同优化:打造生产级别的打包配置——详解从基础设置到高级代码拆分和插件使用
【8月更文挑战第31天】在现代前端开发中,优化应用性能和加载时间至关重要,尤其是对于使用Angular框架的项目。本文通过代码示例详细展示了如何配置Webpack,以实现生产级别的打包优化。从基础配置到生产环境设置、代码拆分,再到使用加载器与插件,每个步骤都旨在提升应用效率,确保快速加载和稳定运行。通过这些配置,开发者能更好地控制资源打包,充分发挥Webpack的强大功能。
24 0
|
1月前
|
JavaScript 前端开发 CDN
webpack打包发布~
【8月更文挑战第7天】
33 1
|
28天前
|
前端开发 开发者
在前端开发中,webpack 作为模块打包工具,其 DefinePlugin 插件可在编译时动态定义全局变量,支持环境变量定义、配置参数动态化及条件编译等功能。
在前端开发中,webpack 作为模块打包工具,其 DefinePlugin 插件可在编译时动态定义全局变量,支持环境变量定义、配置参数动态化及条件编译等功能。本文阐述 DefinePlugin 的原理、用法及案例,包括安装配置、具体示例(如动态加载资源、配置接口地址)和注意事项,帮助开发者更好地利用此插件优化项目。
30 0
|
30天前
webpack——打包去除console
webpack——打包去除console
24 0
|
2月前
|
缓存 JSON 前端开发
Webpack打包优化实践
【7月更文挑战第17天】Webpack的打包优化是一个持续的过程,需要开发者根据项目的实际情况选择合适的优化策略。通过拆分代码、压缩代码、使用Tree Shaking、优化加载器配置、利用缓存以及进行性能分析,我们可以有效提升Webpack的打包效率和应用的加载
|
3月前
|
缓存 前端开发 JavaScript
Webpack作为模块打包器,为前端项目提供了高度灵活和可配置的构建流程
【6月更文挑战第12天】本文探讨了优化TypeScript与Webpack构建性能的策略。理解Webpack的解析、构建和生成阶段是关键。优化包括:调整tsconfig.json(如关闭不必要的类型检查)和webpack.config.js选项,启用Webpack缓存,实现增量构建,代码拆分和懒加载。这些方法能提升构建速度,提高开发效率。
52 3