问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样使用webpack源码loader机制

发布网友 发布时间:2023-08-04 06:18

我来回答

1个回答

热心网友 时间:2024-12-14 09:15


这次给大家带来怎样使用webpack源码loader机制,怎样使用webpack源码loader机制的注意事项有哪些,下面就是实战案例,一起来看一下。
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用法

配置
mole: {
rules: [
{
test: /\.css$/,
use: [
{ loader: 'style-loader' },
{
loader: 'css-loader'
}
]
}
]
}内联
import Styles from 'style-loader!css-loader?moles!./styles.css';CLI
webpack --mole-bind 'css=style-loader!css-loader'说明 上面三种使用方法作用都是将一组链式的 loader, 按照从右往左的顺序执行,loader 链中的第一个 loader 返回值给下一个 loader。先使用css-loader解析 @import 和 url()路径中指定的css内容,然后用style-loader 会把原来的 CSS 代码插入页面中的一个 style 标签中。
loader实现
//将css插入到head标签内部
mole.exports = function (source) {
let script = (`
let style = document.createElement("style");
style.innerText = ${JSON.stringify(source)};
document.head.appendChild(style);
`);
return script;
}
//使用方式1
resolveLoader: {
moles: [path.resolve('node_moles'), 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 = loaderContext.loaders[loaderContext.loaderIndex];
// load loader mole
loadLoader(currentLoaderObject, function(err) {
var fn = currentLoaderObject.pitch;
runSyncOrAsync(
fn,
loaderContext, [loaderContext.remainingRequest, loaderContext.previousRequest, currentLoaderObject.data = {}],
function(err) {
if(err) return callback(err);
var args = Array.prototype.slice.call(arguments, 1);
if(args.length > 0) {
loaderContext.loaderIndex--;
iterateNormalLoaders(options, loaderContext, args, callback);
} else {
iteratePitchingLoaders(options, loaderContext, callback);
}
}
);
});
}相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
推荐阅读:
怎样在Vue中使用Sortable

如何使用JS实现运算符重载
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
WIN7不会自动安装AHCI驱动是怎么回事?每次重装系统后都得我自己安装_百... 钉钉录播课能否查看观看时长 为什么城市轨道要有身高条件 城轨交通运营管理专业现身高吗 城市轨道交通运营管理这个专业是否有身高要求 读城轨专业需要什么条件 学习城轨专业需要什么条件? 城市轨道专业最低的身高要求多少?身高158毕业出来好找工作吗? 城轨专业要求身材吗 城轨专业有身高限制吗 西施小报怎么做 东施效颦成语图片 “人格分裂”的实体化(值得一读) 动作\举止\声音都像女生的男生是同性恋吗? 决定命运的关键性因素是什么? 什么叫熔融状态? 美国内华达大学里诺校区专业有哪些 为什么有那么多人喜欢所谓的“鬼畜”? 巴拉拉小魔仙里扮演严莉莉妈妈的演员是谁啊? 美国内华达州的温度常识及名校推荐 猎场拼音怎么拼写 严莉莉的妈妈扮演者 文科生在高考的时候总分能够考到740分,那么能够成为全国的文科状元吗... 南京大学物理学院夏令营录取名单 740高考还额外加分吗? 文科生在高考的时候总分能够考到740分,那么能够成为全国的文科最高分... 如何在工作中保持良好的心态和积极的态度? 你好!如果考740分能拿多少奖学金? 作比较的作用有哪些? 启是怎么建立夏朝的?揭启建立夏朝的故事 英语1到100的序数词怎么读? office安装后,每次打开文件,又出现安装 北京常夏石竹种子哪里有 北京顺义哪里卖蔬菜种子? 北京哪里有卖葱苗的 北京顺义到那个地方去买小麦的种子? 中医药大学的校园环境如何? 苹果手机为啥只显示一个卡 齿轮标注M1*12T代表什么 多肉植物都有哪些品种(常见多肉种类排名) 中国地质大学2010年河南录取分数线拜托各位了 3Q 韩后优肌水漾CC霜怎么打开啊? oppo手机右上角有一个hd是什么意思 为什么粤省事上没有电子生育证明 粤省事电子身份证为什么用不了,说业务繁忙? ...要职工的毕业证和身份证的原件和复印件是做什么用的呀??? 前未寨村位于哪个市 地下车库半夜十二点算公共场所吗 地暖地找平后本打算全铺复合地板,现在想铺瓷砖,可以吗? 邯郸弘济学本怎么样?