通常是一个函数
module.exports = function (source, sourceMap?, data?) {
// source:为 loader 的输入,可能是文件内容,也可能是上一个 loader 处理结果
// sourceMap:可选参数,代码的 sourcemap 结构
// data:可选参数,其它需要在 Loader 链中传递的信息
return source;
};
通过 return 语句返回处理结果,除此之外 Loader 还可以调用 callback api 返回更多信息,供下游 Loader 或者 Webpack 本身使用
callback 签名:
this.callback(
// 异常信息,Loader 正常运行时传递 null 值即可
err: Error | null,
// 转译结果
content: string | Buffer,
// 源码的 sourcemap 信息
sourceMap?: SourceMap,
// 任意需要在 Loader 间传递的值
// 经常用来传递 ast 对象,避免重复解析
data?: any
);
loader 例子:
module.exports = function (source) {
const content = doSomeThing2JsString(source);
// 如果 loader 配置了 options 对象,那么this.query将指向 options
const options = this.query;
// 可以用作解析其他模块路径的上下文
console.log('this.context');
/*
* this.callback 参数:
* error:Error | null,当 loader 出错时向外抛出一个 error
* content:String | Buffer,经过 loader 编译后需要导出的内容
* sourceMap:为方便调试生成的编译后内容的 source map
* ast:本次编译生成的 AST 静态语法树,之后执行的 loader 可以直接使用这个 AST,进而省去重复生成 AST 的过程
*/
this.callback(null, content);
// or return content;
};