站长网 系统 webpack源码之loader机制解析

webpack源码之loader机制解析

loader概念 loader是用来加载处理各种形式的资源,本质上是一个函数, 接受文件作为参数,返回转化后的结构。 loader 用于对模块的源代码进行转换。loader 可以使你在 import 或加载模块时预处理文件。因此,loader 类似于其他构建工具中任务(task),并提供了

loader概念
 
loader是用来加载处理各种形式的资源,本质上是一个函数, 接受文件作为参数,返回转化后的结构。
 
loader 用于对模块的源代码进行转换。loader 可以使你在 import 或"加载"模块时预处理文件。因此,loader 类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的强大方法。loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript,或将内联图像转换为 data URL。loader 甚至允许你直接在 JavaScript 模块中 import CSS文件!
 
loader和plugin区别
 
之前一篇文章中介绍了plugin机制,和今天研究的对象loader,他们两者在一起极大的拓展了webpack的功能。它们的区别就是loader是用来对模块的源代码进行转换,而插件目的在于解决 loader 无法实现的其他事。为什么这么多说呢?因为plugin可以在任何阶段调用,能够跨Loader进一步加工Loader的输出,在构建运行期间,触发事件,执行预先注册的回调,使用compilation对象做一些更底层的事情。
 
loader用法
 
配置
 
module: {  rules: [   {    test: //.css$/,    use: [     { loader: 'style-loader' },     {      loader: 'css-loader'     }    ]   }  ] }
内联
 
import Styles from 'style-loader!css-loader?modules!./styles.css';
CLI
 
webpack –module-bind 'css=style-loader!css-loader'
说明 上面三种使用方法作用都是将一组链式的 loader, 按照从右往左的顺序执行,loader 链中的第一个 loader 返回值给下一个 loader。先使用css-loader解析 @import 和 url()路径中指定的css内容,然后用style-loader 会把原来的 CSS 代码插入页面中的一个 style 标签中。
 
loader实现
 
//将css插入到head标签内部module.exports = function (source) {  let script = (`   let style = document.createElement("style");   style.innerText = ${JSON.stringify(source)};   document.head.appendChild(style);  `);  return script;}//使用方式1resolveLoader: {  modules: [path.resolve('node_modules'), path.resolve(__dirname, 'src', 'loaders')]},{  test: //.css$/,  use: ['style-loader']},//使用方式2//将自己写的loaders发布到npm仓库,然后添加到依赖,按照方式1中的配置方式使用即可
说明 上面是一个简单的loader实现,同步的方式执行,相当于实现了style-loader的功能。
 
loader原理
 
function iteratePitchingLoaders(options, loaderContext, callback) {  var currentLoaderObject

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/fuwuqi/xt/2021/1214/35965.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部