三、Loader 接口 四、Loader 传参

1. 新建select-hero-loader 2. webpack config 配置 3. 使用验证 四、总结

Loder 特性

前言

webpack 的loader 基础作用相当于一个项目插件,能够将指定文件统一的处理,是一个函数,相当于源码经过这个函数,出去变成了想要的目标。

官方描述:

loader 用于对模块的源代码进行转换。loader 可以使你在 import 或 “load(加载)” 模块时预处理文件。因此,loader 类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的得力方式。loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript 或将内联图像转换为 data URL。loader 甚至允许你直接在 JavaScript 模块中 import CSS 文件!

多余的不多赘述,看官方文档loader,介绍的很详细。这篇主要通过实战记录自定义loader,了解loader工作的整个过程。

一、最简单的自定义loader

准备工作

loader 可以看做一个函数,输入是源码,输出是经过loader 加工之后的。

自定义loader格式:

/**

@param {string|Buffer} content 源文件的内容 @param {object} [map] 可以被 https://github.com/mozilla/source-map 使用的 SourceMap 数据 @param {any} [meta] meta 数据,可以是任何内容

*/

function webpackLoader(content, map, meta) {

// 你的 webpack loader 代码

}

下面目标是创建一个英雄联盟英雄说明loader,loader 会替换英雄名和技能,增加详细说明。

1. 新建自定义loader 文件

hero-loader.js:

module.exports = function (source) {

console.log(source);

return source.replace(“德玛西亚”,“英雄联盟保健哥:德玛西亚!”)

}

这样一个loader 就创建完成了,接下来使用loader

2. 使用自定义loader

在webpack.config.js 文件里:

{

test:/.js$/,

use: “./src/custom-loader/hero-loader.js”, // 看这里,看这里

}

这里use 存放自定义loader 文件 存放路径

3. 使用验证

新建hero.js:

exports.hero =‘德玛西亚’

新建index.js:

import hero from “./hero.js”;

console.log(hero);

接下来执行webpack 打包命令打包,生成dist 下文件,具体webpack 配置见源码。

将打包后的文件引入index.html ,并在浏览器打开。

结果德玛西亚已经替换成了更详细的介绍成功了。

二、loader内联方式

目标

通过内联的方式使用loader 别名载入loader

1. 新建自定义loader 文件

skill-loader:

module.exports = function (source) {

return source.replace(“大宝剑”,“R技能是:大宝剑!”)

}

2. webpack config 配置别名加载

resolveLoader:{

alias:{

‘skill-loader’:resolve(__dirname,‘src/custom-loader/skill-loader.js’)

}

}

3. 内联使用

skill.js:

exports.skill = ‘大宝剑’

index.js 引入:

import skill from “!skill-loader!./skill.js”;

console.log(skill);

4. 执行webpack 命令验证

打包之后的文件:

/***/ “./src/hero.js”:

/!*******************!\

!*** ./src/hero.js ***!

*********************/

/***/ ((__unused_webpack_module, exports) => {

eval(“/*\n * @Author: ZY\n * @Date: 2022-02-14 16:26:29\n * @LastEditors: ZY\n * @LastEditTime: 2022-02-14 16:27:33\n * @FilePath: /webpack-demo/packages/loader-demo/src/hero.js\n * @Description: 文件描述\n */\n\nexports.hero =‘英雄联盟保健哥:德玛西亚!’\n\n//# sourceURL=webpack:///./src/hero.js?”);

/***/ }),

/***/ “./src/index.js”:

/!********************!\

!*** ./src/index.js ***!

**********************/

/***/ ((__unused_webpack_module, webpack_exports, webpack_require) => {

“use strict”;

eval(“webpack_require.r(webpack_exports);\n/* harmony import / var hero_js__WEBPACK_IMPORTED_MODULE_0_ = webpack_require(/! ./hero.js / “./src/hero.js”);\n/ harmony import / var skill_loader_skill_js__WEBPACK_IMPORTED_MODULE_1_ = webpack_require(/! !skill-loader!./skill.js / “./src/custom-loader/skill-loader.js!./src/skill.js”);\n/\n * @Author: ZY\n * @Date: 2022-02-14 11:44:14\n * @LastEditors: ZY\n * @LastEditTime: 2022-02-14 16:48:22\n * @FilePath: /webpack-demo/packages/loader-demo/src/index.js\n * @Description: 文件描述\n */\n\n\n\n\nconsole.log(hero_js__WEBPACK_IMPORTED_MODULE_0_);\nconsole.log(skill_loader_skill_js__WEBPACK_IMPORTED_MODULE_1_);\n\n//# sourceURL=webpack:///./src/index.js?”);

/***/ }),

/***/ “./src/custom-loader/skill-loader.js!./src/skill.js”:

/!********************************************************!\

!*** ./src/custom-loader/skill-loader.js!./src/skill.js ***!

**********************************************************/

/***/ ((__unused_webpack_module, exports) => {

eval(“/*\n * @Author: ZY\n * @Date: 2022-02-14 16:26:35\n * @LastEditors: ZY\n * @LastEditTime: 2022-02-14 16:28:04\n * @FilePath: /webpack-demo/packages/loader-demo/src/skill.js\n * @Description: 文件描述\n */\n\nexports.skill = ‘R技能是:大宝剑!’\n\n//# sourceURL=webpack:///./src/skill.js?./src/custom-loader/skill-loader.js”);

/***/ })

可以对比看一下内联和webpack rule 配置有什么区别

收集代码map的时候key是不同的,内两方式会加上loader path

index.html 引入打包js之后运行结果:

三、Loader 接口

了解基础loader使用之后,看看loader 的其他高级接口。

官网很详细这里就不一一赘述(官网loader接口)

四、Loader 传参

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

前端面试题汇总

前端面试题是我面试过程中遇到的面试题,每一次面试后我都会复盘总结。我做了一个整理,并且在技术博客找到了专业的解答,大家可以参考下:

由于篇幅有限,只能分享部分面试题,完整版面试题及答案可以【点击我】阅读下载哦~无偿分享给大家

感悟

一个整理,并且在技术博客找到了专业的解答,大家可以参考下:

由于篇幅有限,只能分享部分面试题,完整版面试题及答案可以【点击我】阅读下载哦~无偿分享给大家

感悟

春招面试的后期,运气和实力都很重要,自己也是运气比较好,为了回馈粉丝朋友们(毕竟自己也玩了这么久哈哈哈),整理个人感悟和总结以上。最后祝愿大家能够收获理想offer!!

参考阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。