1.style-loader和css-loadder
我的页面中现在有一张猫咪得图片,如下:
但是我觉得图片有点太大了,于是我给图片加了一个
avatar
的类名,并在src目录下新建了一个demo.css
的样式文件,对图片的大小进行了限制:
.avatar{
width: 150px;
height: 150px;
}
写好之后,在src目录下的入口文件index.js
中引入样式文件:
import './demo.css'
然后运行npm run bundle
进行打包,这时候控制台就会报一个错误,如下所示:
翻译过来就是webpack需要一个合适的
loader
来处理css文件,这个时候我们就需要能够处理样式的loader:style-loader,css-loader
来帮我们处理样式文件了,修改webpack配置文件如下:
rules: [{
test: /\.(jpe?g|png|gif|svg)$/,
use: {
loader: 'url-loader',
options: {
name: '[name]_[hash:6]. [ext]',
outputPath: 'images',
limit: 204800 //表示当图片的大小超过200kb时,将其打包生成图片
}
}
},
{//新增的代码
test: /\.css$/,
use: ['style-loader', 'css-loader']
},
]
修改完之后还需要安装一下这两个依赖,
npm install css-loader style-loader -D
安装完成之后,运行npm run bundle
再次打包,打包完成之后,打开页面,就可以看到我们的图片确实变小了:
css-loader的作用
:css-loader会帮我们分析出几个css文件之间的依赖关系,最终把这些css文件合并成一个css文件;
style-loader的作用
:在得到css-loader生成的内容之后,style-loader会把这段内容挂到页面的
中,如下所示:
这个
标签就是style-loader帮我们挂载到页面上的,所以在处理css文件的时候,我们需要css-loader和style-loader结合一起使用,才可以让我们的样式起作用
2.sass-loader
假如我的css文件是.scss文件,那又该如何处理呢?
//demo.scss
.avatar{
width: 150px;
height: 150px;
}
在index.js中导入:
//index.js
import './demo.scss'
我们运行npm run bundle
重新打包,这个时候命令行中会报一个错:
翻译过来就是webpack需要一个合适的loader去处理.scss的文件,这个时候
sass-loader
就出场了,安装一下这个loader:
npm install sass-loader node-sass -D//官网有说使用sass-loader的时候,必须安装node-sass
修改配置文件如下:在rules数组中新增这个配置对象
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader']
},
修改完成后,我们再次打包代码,这个时候就可以看到代码可以正常打包了,回到页面,可以看到我们的样式也是生效的.
注意:
部分的loader
的执行顺序是从右到左,从下到上,所以当我们去打包一个scss文件的时候,实际上首先sass-loader将scss文件翻译转换成css文件,再由css-loader处理各个文件之间的依赖关系,将css文件合并成一个css文件,再由style-loader将处理好的文件添加到页面的