webpack系列之loader及简单的使用
一. loader有什么用
webpack本身只能打包Javascript文件,对于其他资源例如css,图片,或者其他的语法集比如jsx,是没有办法加载的。 这就需要对应的loader将资源转化,加载进来。
比如
你的工程中,样式文件都使用了less语法,是不能被浏览器识别的,这时候我们就需要使用对应的loader,来把less语法转换成浏览器可以识别的css语法。
例如一个简单的less文件:
转换前:
转换后:
后面的案例也是拿这个less文件来做演示的。
二. loader是什么
先来看一下官方对loader的一个解释:
A loader is a node module exporting a function
翻译过来:loader就是一个export出来的function。
既然是 node module,所以如果你自己要自定义一个loader,完全可以这么写:
解释
- 其中
source参数是这个loader要处理的源文件的字符串 - 返回经过“翻译”后的
webpack能够处理的有效模块
如果你所写的 loader 需要依赖其他模块的话,那么同样以 module 的写法,将依赖放在文件的顶部引进来即可:
如果你希望将处理后的结果(不止一个)返回给下一个 loader,那么就需要调用 webpack 所提供的 API。
由于本篇我们只讲loader的基本使用,故这里不再深入讲解,有兴趣的可以点击这里学习。
三. 使用loader
在看了前面的介绍后,接下来给大家介绍一下怎么使用loader。
使用loader的方式
有三种使用方式,如下:
以上三种方式,我们在开发过程中推荐使用第一种方式:
比如你想使用webpack来打包样式文件,则可以在webpack.config.js里添加如下代码:
module.rules 允许你在 webpack 配置中指定多个 loader。 这是展示 loader 的一种简明方式,并且有助于使代码变得简洁。
上述rules的作用:webpack在打包过程中,凡是遇到后缀为css的文件,就会使用style-loader和css-loader去加载这个文件。
四.案例
在对loader有了一个大概的认识后,来做一个小案例,需求如下:
将上一篇(
webpack系列之基本概念和使用)的demo输出文字居中并用黑框圈起来
目录结构
代码目录结构如下:
├── node_modules
├── app
│ ├── bundle.js
│ └── index.html
├── package-lock.json
├── package.json
├── src
│ ├── index.js
│ └── main.less
└── webpack.config.js
1. 安装loader
我们必须使用 loader 告诉 webpack 加载 less 文件,为此,需要首先安装相对应的 loader:
|
|
这些loader的作用如下:
- 安装
less-loader后可以在js中使用require的方式来加载less文件了; - 安装
css-loader后可以在js中加载css文件; - 安装
style-loader的目的是为了让加载的css作为style标签内容插入到html中。
2. 配置loader
webpack.config.js代码如下:
|
|
3.新建样式文件
main.less代码如下:
4. 修改入口文件
在入口文件index.js里引入我们的样式文件
5.打包
在项目根目录(webpack-demo)下执行打包命令:
|
|
打包成功,会输出如下:
6. 查看结果
在浏览器里刷新index.html:
你会发现输出的文字被一个黑框给圈了起来,并且加粗显示,这就表明我们的样式文件已经生效了,而且从截图当中也可以看见样式文件也插入到了html中。
五.常用loader
样式
- css-loader : 解析
css文件中代码 - style-loader : 将
css模块作为样式导出到DOM中 - less-loader : 加载和转义
less文件 - sass-loader : 加载和转义
sass/scss文件
脚本转换编译
- script-loader : 在全局上下文中执行一次
javascript文件,不需要解析 - babel-loader : 加载
ES6代码后使用Babel转义为ES5后浏览器才能解析
Files文件
- url-loader : 多数用于加载图片资源,超过文件大小显示则返回
data URL - raw-loader : 加载文件原始内容
(utf-8格式)
加载框架
- vue-loader : 加载和转义
vue组件 - react-hot-loader : 动态刷新和转义
react组件中修改的部分
六. 总结
本篇向大家介绍了loader有什么用,什么是loader,以及怎么使用loader这些基础知识,如果有兴趣想了解得更深入一些,可以看看怎么编写一个loader。
下一篇会给大家介绍:webpack系列之Plugin及简单的使用