携手创作,共同成长!这是我参与「掘金日新计划 · 8月更文挑战」的第7天,点击查看活动详情
loader是什么
我们都知道,webpack主要是用于资源打包的,里面所有资源都是模块,webpack内部实现了对模块资源的加载,但webpack本身只能处理js模块,如果想要处理其他类型的文件,就需要用loader转换。所以loader用于对模块的源代码进行转换。loader 可以使你在 import 或"加载"模块时预处理文件。loader虽然是扩展了webpack ,但是它只专注于转化文件这一个领域,完成压缩,打包,语言翻译。loader是运行在NodeJS中的。
loader运行流程
- 使用loaderResolver解析loader模块路径
- 根据
rule.modules创建RulesSet规则集 - 使用loader-runner运行loader
loader的特性
1.每个 loader 只做一件事,为了使 loader 在更多的场景中链式调用。
2.loader支持同步也支持异步
3.通过options针对不同的loader配置不同的配置。
4.loader 运行在 Node.js 中,并且能够执行任何可能的操作。
5.每个 loader 都是无状态的,确保 loader 在不同的模块转换之间保存状态。
6.可以将普通的 npm 模块导出为 loader
loader的组成
loader 默认有两部分组成:pitch 和 normal。
loader 会先执行 pitch,然后获取资源再执行 normal loader。如果 pitch 有返回值时,就不会走之后的 loader,并将返回值返回给之前的 loader。loader 其实就是一个函数,函数的参数是处理文件的文件内容,参数类型是字符串。这个函数还有一个 pitch 方法,同样也有一个参数,是字符串形式的剩余参数,这个剩余参数中有当前loader之后还没有执行的loader的所在的绝对路径。