loader:一个导出为函数的js模块
module.exports = function(source){//代码
return source;
}多个loader串行执行顺序:从后到前运行
函数组合的两种情况:unix中的pipline,Compose(webpack采用的是这种)
compose= (f, g) => (...args) => f(g(...args))
验证loader执行顺序
新建webpack配置,引入两个自定义的loader
npm run build

loader的本地开发
loader-runner:允许在不安装webpack的情况下运行loaders
作用:
1. 作为webpack的依赖,webpack中使用它执行loader
2. 进行loader的开发和调试
借助loader-runner进行本地开发与调试:略,github中
loader参数的获取:loader-utils的getOptions方法获取
练习:
1.修改run-loader文件里面的loaders配置
2. 修改raw-loader文件
3. node run-loader 检测结果,可以读取loader的options配置

loader的异常处理(同步loader)
1. loader内直接通过throw抛出
2. this.callback,loader的上下文回调函数
this.callback(
err:Error | null,
content:string | Buffer,
sourceMap?:SourceMap,
meta?:any
)loader的异步处理
通过this.async来返回一个异步函数
1.第一个参数是Error, 第二个参数是处理的结果
module.exports = function(input){
const callback = this.async()
callback(null, input + input)
}loader中使用缓存
webpack中默认开启loader缓存
可以使用this.cacheable(false)来关掉,
缓存条件:loader的结果再相同的输出条件下有确定的输出
如果laoder存在依赖,那么该loader无法使用缓存
loader进行文件输出
this.emitFile(url,content)
在a-loader中加入注释掉this.emit则不会有index.js文件产生
[name].[ext]是匹配文件,并把内容进行输出。

