前语

在上一篇文章【Webpack进阶】Loader深化解析中,根究了Loader的原理和运行机制,本文会通过介绍常见款式loader的效果和结束gigithub下载thub中文社区html个人网页完好代码加深对loader的了解。

关于浏览器一个款式文件(以less为例),最常见的load长沙师范学院er装备为:

{
module: {
rules: [
{
test: /.less$/,
ugithub敞开私库se: [
'style-loader',
'css-loader',
'less-lo浏览器主页批改adHTTPSer',
],
},
],
},
}

下面html标签特点大全咱们来逐一议论。

less-github是干什么的loader

Less是CSS预处理言语,扩展了Cgithub中文官网网页SS言语,增加了变量、Mixin、函https安全问题浏览器怎样翻开网站数等特性,Less-lohttps安全问题https和http的差异ader的效果便是将less代码转译为浏览器可以辨认的CSS代码。

/https认证/ demo.less
@base: #f938ab;
.bCSSox-shadow(@style, @c) when (iscolor(@c)) {
-webkit-box-shadow: @style @c;
box-shadgithub打不开ow:         @style @c;
}
.box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {
.box-shadow(@style, rgba(0, 0, 0, @alpha));
}
.box {
color: saturate(@base, 5%);
border-color: lightecsscin(@base, 30%);
div {浏览器拜访过于再三不能用 .box-shadhtmlow(0 0 5px, 30%) }
}

上面的less代码会被less-loader转译为:

// demo.css
.box {
color: #fe33ac;
border-color: #fdcdegithub中文社区a;
}
.box div {
-webkit-box-shadow: 0 0 5px rghttps认证ba(0, 0, 0,浏览器历史记录删了怎样找回 0.3)html文件怎样翻开;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.仓鼠寿数3);
}

所以less-loader的原理很简略,便是调用less库供给的办法,转译lesshttps协议语法后输出github下载,如下:

// les长沙师范学院s-loader结束(经简化)
const less = requhtmlire('lgithub是干什么的ess')长沙师范学院;
module.HTMLexphtml标签orts = function(content) {
consgithub打不开t callback = thi浏览器拜访过于再三不浏览器历史上的痕迹在哪里能用s.async(); // 转译比较耗时,选用异步办法
const options = this.getOptions(); // 获取装备html简略网页代码文件中less-loader的optiohtml5n浏览器s
less.浏览器历史上的痕迹在哪里render(
content,
createOptions(options), // less转译的装备
(err, output) => {
callbagithub怎样下载文件ck(浏览器历史上HTML的痕迹在哪里err, output.css); // 将生成的css代码传递给下一个loader
}
);
};

css-loader

Css-loader的效果主要是解析css文件中的@import和url句子,处理css-modules,html文件怎样翻开并将效果作为一个js模块回来。

假定咱们有a.css、b.css、c.css:浏览器网站删除了怎样恢复

// a.css
@import './bhtml.css'; // 导入b.css
.a {
font-size: 16px长沙师范学院;
}
// b.css
@import './c.css'; //html标签特征大全 导入c.css
.b {
color: red;
}
// c.css
.c {
font-weight: bolder;
}

来看看css-lohtml5ader对a.css的编译输出:

/html个人网页完好代码/ css-loader输出浏览器哪个好
e浏览器历史上的痕迹在哪里xports = module.exports = require("../../../node_modules/css-loader/li长沙市气候b/cssgithub官网-base.js")(falhtml标签se);
// importshtml代码
// 文件需求的依托jsgithub中文官网网页沙师范学院模块,这儿为空
// module
exporhttps认证ts.push([ // 模块导出cssci内容
m络绎时空的侠客odule.id,
".src-components-Home-index__c-https和http的差异-3rCSSiXS {n  font-weight: bolder;n}长生十万年n.src-compo浏览器主页修复nents-Home-index__b--I-yI3 {n  chtml标签特点大全olhtml标签or: red;n}n.src-components-Hom长生十万年e-i浏览github中文社区器网站删除了怎样恢复ndex__a--3Egithub怎样下载文件FPEHTTPS {n  font-size: 16px;n}n",
""
]);
// exports
exports.locals = { // css-modules的类名映射
"csscic": "src-components-Home-index__c--3riX仓鼠寿数S"浏览器主页批改,html个人网页无缺代码
"b": "src-components-CSSHome-index__b--github打不开I-yIhtml标签特征大全3",
"a"浏览器哪个好: "src-https和http的差异components-Home-index__a--3EFPE"
};

可以了解为css-loader将a.https域名css、b.css和c.css的款式内容以字符串的办法拼接在一起,并将其作为js模块的导出内容。

// css-loader源码(经简化)
// https://github.com/webpack-c浏览器拜访过于再三不能github怎样下载文件ontrib/css-loader/blob/github永久回家地址mas浏览器哪个好ter/src/i浏览器下载ndex.js
importCSS po陈涉世家翻译及原文st长生十万年css from 'postcss';
module.exports = async function (content, map, meta) {
cohttps域名nst options = this.getOptihtml标签特点大全ons(); // 获取装备
const plugins = []; // 转译源码所需的postcss插件
shouldUseMohtml标签dulesPlugins(options, this) &&amgithub长生十万年中文官网网页p; plugins.push(modulesPlugins); // 处理css-modules
shouldUseImportPlugin(options, this) &https安全问题& plugins.pushttps域名h(importPlugin); // 处理@impor浏览器怎样翻开网站t句子
shouldUseURLPlugin(opticsscions浏览器历史记录删了怎样找回, this) && plugins.push(urlPlugin); /CSS/ 处理url()句子
shouldU超神兽宠店seIcshttps协议sPlugin(optionshttps安全问题, tgithub中文官网网页his) && plugins.pugithub永久回家地址sh(icssPlugin); // 处理icss相关逻辑
if (meta &agithub官网mp;&amphttps协议; meta.asthtml个人网页无缺代码github中文官网网页) { // 复用前面loade浏览器网站删除了怎样恢复r生成的CSS AST(如postcss-loader)
content = meta.ast.root;
}
const result = await postcss(仓鼠寿数html标签plugins).浏览器历史记录删了怎样找回process(contentgithub敞开私库); // 运用postcss转译源码
const importCode = ghttps域名html个人网页无缺代码etImportCode(); // 需求导入的依托语超神兽宠店
const moduleCo长沙市气候de = getModuleCode(result)html是什html文件怎样翻开么意思; /https超神兽宠店域名/ 模浏览器怎样翻开网站块导出内容
const exportCode = getExportCode(); // 其他需求导出的信息,如css-modules的类名映射等
const callback = this.async(); // 异步回来
callback(null, `${imcssciportCode}${moduleCode}${expohtml5网页制造rtCode}`);
};

style-loader

通过css-loader的转译,咱们现已得到了无缺的css款式代码,style-loa浏览器der的效果便是将效果以style标签的办法刺进DOM树中。

https和http的差异觉上如同咱们只需求像下面这样回来一段js代码,将浏览器的历史记录在哪css-loader回来的效果刺进DOM就行:

m浏览器的历史记录在哪odule.exports = functgithub永久回家地址ion (content) {
return `
const style = document.createElement('st浏览器历史记录删了怎样找回yle');
style.html5innerHTMhtmlL = '${coHTMLntent}';
docuhtml5ment.head.appendChild(style);
`;
};

但css-loader回来的不github下载是css款式代码的文本,而是一个js模块的代码,将这些js代码直接放进style标里显然是不行html代码的。

咱们来看看style-loader的完长沙师范学院毕:

// sthttps认证yle-l陈涉世家翻译及原文oadhtml文件怎样翻开er
import loaderUtils from 'loader-utils';
module.exports = function (content) {
// do nothing
};
module.exports.pitch = function (remainingRequest) {
/*
* 用require句子获取c浏览器ss-loader回来的js模块的导出
* 用'github中文社区!!'前缀跳过装备中的loader,避免重复实施
* 用remainingRequest参数获取loader链的剩下部分,在本例中是css-loadegithub下载r、less-loader
* 用loaderUtils的stringifyRequest办法将request句子中的绝对路径转为相对路径
*/
const reques浏览器拜访过于再三不能用tPath = loaderUtils.stringifyRequest(this长生十万年, '!!' + remainingRequest);
/HTML/ 本例中requestPath为:
// '!!../node_modules/css-loader/i络绎时空的侠客ndex.js!https认证..html5/node_modules/less仓鼠饲养八大禁忌-loader/dist/cjs.js!src/styles/indehttps域名x.less'
return `
const content浏览器下载 = require(${requestPath})
const style = document.createElhtmlHTML5ement('style');https和http的差异
style.inne浏览器下载rHTMhtml简略网页代码L = content;
document.head.appen浏览器历史记录设置dChild(style);
`;
};

style浏览器哪个好-loader的几个规划思路:

  • css-loader回来的款式只能通过其js模块的运行时得到,故浏览器哪个好运用require句子获浏览器的历史记录在哪
  • normal办法实际上什么都没做,在pitch办法里连续loader链的实施,再以i络绎时空的侠客nline办法调用了后方的loader来加浏览器怎样翻开网站载当时的less文件
  • 假定将pitch中的结束放到normal方html个人网页无缺代码法里,就会构成loade络绎时空的侠客r链实施两遍
  • 假定requestPath中没有’!长生十万年!’前缀,就会构成loader链被无限循环调用

style-loader的结束逻辑比较绕github中文社区,也是一个比较经典的pitch运用,了解了它的原理,就可以是说对loaGitHubder的调用链、实施次第和模块化输出等有了一个比较全面的知道,举荐细浏览器历史记录删了怎样找回细体会。