前言:此节的开展是在上一节的基础上进行的,(每一节都是从无到有编写关于此节的知识)。
CSS中的图片处理
1.新建images文件夹
在src目录下新建一个images文件夹,把需要的图片放入images文件夹。图片下载
2.新增标签
在index.html文件中增加一个放置div的标签(需要注意的是这里修改的是src下的index.html文件,不是dist下的),代码如下:
<div id="img"></div>
3.编写样式
在src目录下的css目录下的index.css
文件中编写样式,如下,
src/css/index.css:
body{
background-color: #018eea;
color: red;
font-size: 32px;
text-align: center;
}
#img{
background-image: url(../images/webapck.jpg);
width:271px;
height:285px;
}
4.loader安装
使用npm
在终端安装file-loader
和url-loader
。
npm install --save-dev file-loader url-loader
关于file-loader
和url-loader
,下面了解一下:
(1)file-loader
:解决引用路径的问题,拿background
样式用url引入背景图来说,我们都知道,webpack
最终会将各个模块打包成一个文件,因此我们样式中的url路径是相对入口html页面的,而不是相对于原始css文件所在的路径的。这就会导致图片引入失败。这个问题是用file-loader
解决的,file-loader
可以解析项目中的ur
l引入(不仅限于css
),根据我们的配置,将图片拷贝到相应的路径,再根据我们的配置,修改打包后文件引用路径,使之指向正确的文件。
(2)url-loader
:如果图片较多,会发很多http
请求,会降低页面性能。这个问题可以通过url-loader
解决。url-loader
会将引入的图片编码,生成dataURl。相当于把图片数据翻译成一串字符。再把这串字符打包到文件中,最终只需要引入这个文件就能访问图片了。当然,如果图片较大,编码会消耗性能。因此url-loader
提供了一个limit
参数,小于limit
字节的文件会被转为DataURl,大于limit的还会使用file-loader
进行copy。
5.配置url-loader
安装之后,开始使用loader
,此时在loader
使用时不需要用require
引入,在plugins
才需要使用require
引入。
webpack.config.js文件:
//模块:例如解读CSS,图片如何转换,压缩
module:{
rules: [
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
},{
test:/\.(png|jpg|gif)/ ,
use:[{
loader:'url-loader',
options:{
limit:500000
}
}]
}
]
},
注释:
1.test:/.(png|jpg|gif)/是匹配图片文件后缀名称。
2.use:指定使用的loader和loader的配置参数。
3.limit:是把小于500000B的文件打成Base64的格式,写入打包后的js中。
此处只是其中一种配置方式,其余可参考
为什么只使用了url-loader?
在配置loader时,我们并没有在webpack.config.js
中使用file-loader
,但是依然打包成功了。这个和file-loader
和url-loader
之间的关系有关。url-loader
和file-loader
是什么关系呢?简单的说,url-loader
封装了file-loader
,url-loader
不依赖于file-loader
,即使用url-loader
时,只需要安装url-loader
即可,不需要安装file-loader
,因为url-loader
内置了file-loader
。url-loader
工作分两种情况:
1.文件大小小于limit
参数,url-loader
将会把文件转为DataURL(Base64格式
);
2.文件大小大于limit
,url-loader
会调用file-loader
进行处理,参数也会直接传给file-loader
。
也就是说,其实我们只安装一个 url-loader
就可以了。但是为了以后的操作方便,这里就顺便安装上file-loader
。
6.打包
在终端使用webpack
命令进行打包
webpack
7.启动服务
在终端中执行npm run server
命令,启动我们的服务,然后通过http://localhost:1818/
进行访问。
访问效果如下: