webpack中的图片打包之路
最近在Github上弄项目,需要搭建一个webpack开发环境。Emmm,是的,从0开始搭建一个项目确实不容易,光Webpack的坑就够我踩一路的了。这不,刚搭建到“图片打包”这里,就遇到了麻烦。最后找到了问题的源头,在mini-css-extract-plugin(抽离CSS代码为一个CSC文件的插件)这个插件上。
错误操作就不示范了,下面来探讨一下webpack中的图片打包方式。
1. 在JS中使用图片
import logo from './images/logo.png' // 引入图片资源并返回一个新的图片地址
let img = new Image()
img.src = './images/logo.png' // 错误!JS不会认为'./images/logo.png'一个资源,而是字符串
img.src = logo
webpack中的相关配置
{
test: /\.(jpg|png|gif)$/,
use: [{
loader: 'url-loader',
options: {
outputPath: 'images/'
limit: 100*1024
}
}]
}
上面使用的是url-loader,该loader比file-loader更好的地方就是能根据图片的大小来决定是使用base64格式还是正常加载。
例如上面的配置,当图片小于100KB时使用base64格式输出,这样就可以避免一个http请求。
limit:属性值有三种类型:Number(限定最大值),Boolean(是否启用base64),String,默认为undefined
2. 在CSS中使用图片,例如:背景图片
这种方法的url-loader配置同上,但是有一个问题。如果你在配置CSS的过程中使用了mini-css-webpack-plugin这个插件来抽离CSS,那么一定要注意路径的问题,我就是在这上面踩了个大坑,费了不少时间。
CSS:
body {
background: url('../images/logo.png')
}
通过相对路径引用了一张图片(css文件夹和images文件夹处于同一级)
配置文件:
{
test: /\.less$/,
use: [{
loader: MiniCssExtractPlugin.loader,
options: {
// 在这里配置publicPath,不然CSS里面的图片路径是以CSS目录为根目录的
publicPath: '../'
}},
'css-loader',
'postcss-loader',
'less-loader'
]
},
注意这里的 ‘publicPath’ ,当初我就是没有设置该属性,导致build后的CSS为
{background: url(images/logo.png)} // 明显路径错了
{background: url(../image/logo.png)} // 设置publicPath值为 '../'
这样,打包后的CSS中背景图片的引用就正确了。
3. 在HTML中引用图片
我们经常使用html-webpack-plugin插件来给项目设置一个HTML模板,所以有时我们会在模板中插入图片,但是webpack对HTML中的图片是无能为力的,因为img标签的src引入的图片没有被依赖,不会被打包,所以这时候我们需要使用 html-withimg-loader。
webpack配置:
{
test: /\.html$/,
use: 'html-withimg-loader'
}
这样,html中的图片也能被正确的打包了!
webpack中的图片打包之路的更多相关文章
- 如何在react&webpack中引入图片?
在react&webpack项目中需要引入图片,但是webpack使用的模块化的思想,如果不进行任何配置,而直接在jsx或者是css中使用相对路径来使用就会出现问题,在webpack中提供了u ...
- webpack中typeScript的打包配置
2018年typescript发展的非常好,js是一门非常灵活的语言,所以一个功能,怎么写都能够写出来,但是这也会导致一个问题,不同人写js的方式不同,那么会导致同一个功能出现的代码风格会迥然不同.这 ...
- 如何在webpack中成功引用到图片?
打包图片时,你可曾遇到在产出目录文件夹找不到图片,即便找到了,但是页面说引用不到资源?页面上或者文件中引用的图片地址不对? 一.在webpack中引入图片需要url-loader //webpack配 ...
- webpack快速入门——CSS中的图片处理
1.首先在网上随便找一张图片,在src下新建images文件夹,将图片放在文件夹内 2.在index.html中写入代码:<div id="pic"></div& ...
- webpack快速入门——处理HTML中的图片
在webpack中是不喜欢你使用标签<img>来引入图片的,但是我们作前端的人特别热衷于这种写法, 国人也为此开发了一个:html-withimg-loader.他可以很好的处理我们在ht ...
- webpack(四) --css样式及图片打包
一.CSS样式打包 1. loader简介 由于Webpack打包入口目前只配置了一个index.js文件,那么其他需要被打包的文件都必须通过模块化方式引入该文件才行,而默认情况下,引入的文件必须是j ...
- vue-cil和webpack中本地静态图片的路径问题解决方案
1 本地图片动态绑定img的src属性 一般我们在html中或者vue组件文件中引用图片是这样,这是不需要做特别处理的 我们将图片放入assets中或者重新建立个文件夹img什么的都可以,随意- 但是 ...
- 关于npm run build打包后css样式中的图片失效的问题(如background)
平时run dev都能正常显示的css背景图片在npm run build打包后竟然不显示了(写在标签对中的图片都可以正常显示),而且dist/static/img目录下是确实有这张图片的,于是查看打 ...
- webpack中,css中打包背景图,路径报错
css-loader: //打包样式中背景图 { test: /\.(png|jpg)$/, loader: "url-loader?limit=8192&name=images/[ ...
随机推荐
- $LCT$维护子树信息学习笔记
\(LCT\)维护子树信息学习笔记 昨天\(FDF\)好题分享投了 \([ZJOI2018]\)历史 这题. 然后我顺势学学这个姿势. 结果调了一年...于是写个笔记记录一下. 基本原理 比较显然地, ...
- springboot--异步执行的方法及定时执行的方法
让方法被调用后异步的执行 一般来说,要异步执行一个任务都是创建一个线程来专门干这个任务.在springboot中有 @Async 这个注解快速实现方法的异步执行.只需要两步:第一步: 在启动类上加上@ ...
- Django中ifequal 和ifnotequal的使用
Django中{% ifequal A B %} 用来比较A和B两个值是否相等,{% ifnotequal A B %}` 用来比较A和B两个值是否不相等..如: {% ifequal user cu ...
- 【leetcode】449. Serialize and Deserialize BST
题目如下: Serialization is the process of converting a data structure or object into a sequence of bits ...
- 调整ceph的pg数(pg_num, pgp_num)
https://www.jianshu.com/p/ae96ee24ef6c 调整ceph的pg数 PG全称是placement groups,它是ceph的逻辑存储单元.在数据存储到cesh时,先打 ...
- JDK1.8 HashMap源码
序言 触摸本质才能永垂不朽 HashMap底层是基于散列算法实现,散列算法分为散列再探测和拉链式.HashMap 则使用了拉链式的散列算法,并在JDK 1.8中引入了红黑树优化过长的链表.数据结构示意 ...
- Cluster基础(二):ipvsadm命令用法、部署LVS-NAT集群、部署LVS-DR集群
一.ipvsadm命令用法 目标: 准备一台Linux服务器,安装ipvsadm软件包,练习使用ipvsadm命令,实现如下功能: 使用命令添加基于TCP一些的集群服务 在集群中添加若干台后端真实服务 ...
- mac的jvm调优工具
安装好JDK之后调优工具所在位置为: /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jvisualvm j ...
- php面试专题---mysql数据库分库分表
php面试专题---mysql数据库分库分表 一.总结 一句话总结: 通过数据切分技术将一个大的MySQLServer切分成多个小的MySQLServer,既攻克了写入性能瓶颈问题,同一时候也再一次提 ...
- jajaj
Docs » 第二章:字符串和文本 » 2.2 字符串开头或结尾匹配 Edit on GitHub 2.2 字符串开头或结尾匹配¶ 问题¶ 你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件 ...