webpack这样打包图片资源,你会吗?webpack打包图片资源_webpack 打包图片-程序员宅基地

技术标签: webpack  Web前端  前端  

webpack打包demo,git地址:https://github.com/OnionMister/webpack-demo.git

打包图片资源分为两种,一种是css、js等中的图片打包,另一种是img标签的图片打包

一、css、js等中的图片打包

这种打包使用的是url-loader,url-loader依赖于file-loader,安装命令如下:

cnpm install url-loader file-loader -D

二、img标签的图片打包

这种打包使用的是html-loader ,安装命令如下:

cnpm install html-loader -D

三、目录结构

在这里插入图片描述

四、index.html的body代码

 	<div class="bg1">less文件中的背景图</div>
    <div class="bg2">less文件中的背景图</div>
    <div class="bg3">less文件中的背景图</div>
    <img src="./imgs/ym.jpg" title='我是img标签' alt="英明">
    <div class="bg4">鼠标图小于10kB,是base64编码,且是通过js添加的背景图</div>

五、index.less代码

.bg1 {
    
    width: 200px;
    height: 100px;
    background-size: 100% 100%;
    background-image: url(./imgs/hp.jpg);
}
.bg2 {
    
    width: 300px;
    height: 150px;
    background-size: 100% 100%;
    background-image: url(./imgs/qz.png);
}
.bg3 {
    
    width: 400px;
    height: 200px;
    background-size: 100% 100%;
    background-image: url(./imgs/rz.jpg);
}
.bg4 {
    
    width: 300px;
    height: 300px;
    background-size: 100% 100%;
}
img {
    
    width: 500px;
    height: auto;
}

六、index.js的代码

需要主要js中的图片一定要导入,如使用require(路径)

// 导入样式
import './index.less';
const bgImg = require('./imgs/small.jpg'); // 这里一定要导入图片,否则打包不了

function test() {
    
    console.log("webpack打包图片资源");
}
test();
var bg4 = document.getElementsByClassName("bg4")[0];
bg4.style.backgroundImage = `url(${
      bgImg})`;

七、webpack.config.js代码

/**
 * 使用url-loader对样式中的html进行处理,url-loader依赖于file-loader
 * 下载:url-loader 和 file-loader
 * 使用html-loader对html中的img标签进行处理
 * 下载:html-loader
 */
const {
    
    resolve
} = require('path'); // 使用resolve()处理绝路径
// html-webpack-plugin版本4 和 webpack5有兼容性问题,报错查看:https://blog.csdn.net/Kindergarten_Sir/article/details/110083041
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 打包html文件
module.exports = {
    
    // 入口文件
    entry: "/src/index.js",
    output: {
    
        // 输出文件名
        filename: "bundle.js",
        // 输出路径,__dirname是当前文件的绝对路径,输出到绝对路径下的dist文件夹下
        path: resolve(__dirname, 'dist'),
        // 给打包后资源引入的路径前缀,静态资源最终访问路径 = output.publicPath + 资源loader或插件等配置路径
        publicPath: "./"
    },
    module: {
    
        rules: [
            // loader配置
            {
    
                // 匹配以样式结尾的文件
                test: /\.less$/,
                // use中的多个loader是自底向上或自右向左运行的
                use: [
                    // 在index.html文件的head中创建style标签,并将js中的样式字符串插入
                    'style-loader',
                    // 将css文件变成common.js的字符串加入到输出的js中
                    'css-loader',
                    // less-loader将less译成css
                    // 需要安装less和less-loader
                    'less-loader'
                ]
            },
            {
    
                // 对样式中引入的图片文件进行转译,不处理img标签
                test: /\.(jpg|png|gif)$/,
                // 下载:url-loader file-loader
                loader: 'url-loader',
                options: {
    
                    // 图片小于10kB,会将图片传换成base64编码处理,
                    // 目的是为了将小图转为编码减少请求数量减轻服务器压力,
                    // 会导致图片体积增大,即base64编码比原图体积大(建议对小于12kB的图做编码处理,大图不处理)
                    limit: 10 * 1024,
                    // 关闭es6模块化处理,避免与html-loader的common.js规范冲突,发生冲突会导致路径变成“[object Module]”
                    // 新版本已经没有这个问题了 可以不关闭。
                    esModule: false,
                    // 默认图片命名为chunk的hash值,太长了
                    // [hash:10]为hash值前十位,[ext]表示文件原有扩展名
                    name:'[hash:10].[ext]'
                }
            },
            {
    
                // 对img标签路径进行处理
                test: /\.html$/,
                // html-loader使用common.js规范对img标签路径进行处理
                loader: 'html-loader'
            }
        ]
    },
    // 插件配置
    plugins: [
        // HtmlwebpackPlugin默认功能为创建空的html(body为空)并引入打包输出的js文件
        // template配置是将指定的html文件的body内容加入到创建的html文件中
        // html-webpack-plugin版本4 和 webpack5有兼容性问题,报错查看:https://blog.csdn.net/Kindergarten_Sir/article/details/110083041
        new HtmlWebpackPlugin({
    
            template: './src/index.html'
        })
    ],
    mode: "development", // 开发环境
    // mode: "production", // 生产环境
}

八、安装webpack和webpack-cli并打包

// 安装
cnpm insatll webpack webpack-cli -D
// 打包命令
webpack

九、打包后的目录

在这里插入图片描述
可运行打包后的html,查看效果。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Kindergarten_Sir/article/details/110238877

智能推荐

游戏中任务系统设计_游戏任务种类-程序员宅基地

文章浏览阅读8.5k次,点赞2次,收藏17次。1、任务分类 游戏中任务可以分为主线任务、支线任务、日常任务、周任务、节日活动任务,其中周任务和节日任务可以根据设定的日期进行开启关闭,属于重复性任务。2、游戏条件 各类任务开启条件:1、玩家等级 2、玩家攻击力3、前置任务等等 完成条件:玩家进行任务进度是否达成 任务关闭:1、玩家领取奖励后关闭任务。2、时间过期3..._游戏任务种类

ACM / ICPC 在线OJ(Online judge)_清华大学 acm网站-程序员宅基地

文章浏览阅读6.4k次,点赞8次,收藏35次。1. codeforces codeforces(这个网站每天会有比赛,一起打CF吧!)http://codeforces.com/problemset2. topcoder:http://www.topcoder.com/challenges/3. kattis 这个网站有历年的ICPC真题 https://open.kattis.com/4. 洛谷:..._清华大学 acm网站

基于语法-CreateFile_::createfilea中文打不开-程序员宅基地

文章浏览阅读599次。可行1:当E:\\a.txt 已经存在,且程序字符=Unicode的时候,下面代码可以正常#include <iostream>#include <windows.h>int main(){ HANDLE hFILE = (HANDLE)CreateFile(L"E:\\a.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL); if (hFILE == INVALID__::createfilea中文打不开

数据库的四种安装部署方式_数据库部署-程序员宅基地

文章浏览阅读6.6k次,点赞2次,收藏13次。数据库安装文章目录数据库安装@[toc]实验环境方式1:使用MySQL仓库来安装部署MySQL一、添加MySQL仓库二、禁用默认的MySQL模块三、安装装MySQL四、启动MySQL服务器五、服务确认方式2:离线安装MySQL一、使用以下执行清理之前实验MySQL仓库安装的数据库:二、网上下载mysql的安装包三、将下载好的文件传入Redhat中的某个路径中四、解压安装包五、使用以下指令安装方式3:使用Docker部署MySQL一、准备Docker环境二、下载MySQL服务器Docker映像三、启动M._数据库部署

sqli-labs:less-32(宽字节注入)_sqli labs less32 宽字节注入-程序员宅基地

文章浏览阅读3k次。宽字节注入产生原因:1、mysql 在使用 GBK 编码的时候,会认为两个字符为一个汉字,例如%aa%5c 就是一个汉字(前一个 ascii 码大于 128 才能到汉字的范围)2、mysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符。mysqli_real_escape_string(*connection,escapestring*)connection 必需。规定要使用的 MySQL 连接 escapestr..._sqli labs less32 宽字节注入

HTML5 游戏开发快速提升_html5游戏开发 slg游戏-程序员宅基地

文章浏览阅读3.1k次。带你快速掌握html5游戏开发基本功,助你快速进阶游戏开发_html5游戏开发 slg游戏

随便推点

org.springframework.web.client.HttpServerErrorException: 500 null_"{\"code\":500,\"data\":null,\"success\":false,\"m-程序员宅基地

文章浏览阅读2.6w次。跨服务调用api,api本身运行没有错误,也没有其他错误,报menuService 相关关联错误;解决:微服务运行需要关联多个其他微服务,所以要保证相关联的服务都启动了。..._"{\"code\":500,\"data\":null,\"success\":false,\"message\":\"org.springframework.web.s"

QT4和QT5信号和槽的区别_qt5和qt4信号槽区别-程序员宅基地

文章浏览阅读5.7k次。信号和槽signals:testSignalOne();testSignalOne(int params);testSignal(int params);piblic slots:testSlotOne();testSlotOne(int params);testSlot(int params);_qt5和qt4信号槽区别

数据包络分析DEA-程序员宅基地

文章浏览阅读57次。测量一些决策部门的生产效率的方法。简单说,现在有三个人,你可以叫他们DMU,a用一个甲生产了一个乙,b用两个甲生产了一个乙,c用三个甲生产了一个乙,显而易见a的效率最高,我们就把他定义为技术前沿面,他的效率为1。那么b就是1/2,c就是1/3。这样我们就可以计算出每个人的效率水平了。

nohup后台执行不打印_nohub有些打印不出来-程序员宅基地

文章浏览阅读4.3k次。①后台执行,但是打印log在nohup.log在你当前目录下,随着执行这个文件越来越大,直到执行完nohup 你要执行的命令 &amp;例如:nohup bash -x test.sh &amp;②后台执行,不打印lognohup 你要执行的命令 &gt;/dev/null 2&gt;log &amp;例如:nohup bash -x test.sh &gt;/dev/..._nohub有些打印不出来

RadioGroup动态添加RadioButton,并且获得事件_radiogroup 动态-程序员宅基地

文章浏览阅读3.6w次,点赞5次,收藏20次。由于有许多的RadioButton是动态的,不是固定的一些,所以需要在代码中,动态的添加到RadioGroup中,下面是我的实现方法。1、添加RadioButton到RadioGroup中RadioGroup group;for(int i=0; i<10; i++){ RadioButton tempButton = new RadioButton(this);_radiogroup 动态

IDEA 1_intellij idea 2018 xms xmx-程序员宅基地

文章浏览阅读246次。"D:\IDEAINSTALL\IntelliJ IDEA 2018.2.1\bin\idea64.exe.vmoptions" -Xms128m-Xmx750m-XX:ReservedCodeCacheSize=240m-XX:+UseConcMarkSweepGC-XX:SoftRefLRUPolicyMSPerMB=50-ea-Dsun.io.useCanonCache..._intellij idea 2018 xms xmx

推荐文章

热门文章

相关标签