本篇文章给大家带来的内容是关于require.context的用法介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
起因:为什么会突然用到webpack这个管理特性呢?
项目某个页面需要引入N张demo图片。即资源的批量引入:如果要引入10+个以上的图片资源,就需要写10+个如下的引入代码:import XXX from 'relative/path/assets/imgs/xxx';,那如果再多一点的静态资源需要引入呢?这时候require.context就派上了用场。
文档
官方文档的介绍先放在这里,可小觑一下,了解使用姿势。
栗子来一个
话不多说,针对上面的场景,我们上一下代码吧。
场景需要我们引入某个指定文件夹下的所有webp格式的图片,在单击demo1的时候展示demo1下的x张案例图,在单击demoX的时候展示demoX下的x张案例图。
// 通过require.context的方式引入指定的路径下匹配到的模块引用 const demoImgsContext = require.context('@src/assets/imgs/demo', false, /\.webp$/); ... // 使用姿势 trigger(type) { this.demoImgs = Arry.from({length: config.type}, (key, value) => value + 1) .map(index => demoImgsContext(`./${type}_demo${index}.webp`)); }
举一反三的场景还有需要的么?
比如vuex引入多个module的store。也可以使用这个方法。
// 添加module文件是,文件命请按照module_XXX的方式命名 // 自动引入module文件夹下的js文件 const mutationContext = require.context('./module', false, /.*\.js/); const modules = mutationContext.keys().reduce((prev, cur) => { // 排除module_root文件 const matches = cur.match(/module_(?!.*root)(\w+)\.js/); const key = matches && matches[1]; key && (prev[key] = mutationContext(cur).default); return prev; }, {});
接下来,让我们看一下,require.context是如何做到动态引入资源的呢?
看下打包后的dist目录下,我们的静态图片案例chunk这个部分的代码是啥样的。
trigger方法中引用模块资源的代码如下,对y方法进行调用,传入了一个资源的路径。
map(function (e) { return y("./".concat(t, "_demo").concat(e, ".webp")) })
那y方法是什么呢?顺藤摸瓜,继续看下打包后的代码。
y = a("ae36");
y方法是某个模块的export,继续查看这个id下的模块代码:
ae36: function (t, e, a) { // 此处是一个map映射,key值和真正的资源id的映射 var i = { "./a_module_demo1.webp": "6085", "./a_module_demo2.webp": "fd3b", "./b_module_demo1.webp": "cbf6", "./b_module_demo2.webp": "220e", "./c_module_demo1.webp": "273e", "./c_module_demo2.webp": "5a5e", "./d_module_demo1.webp": "75b0", "./d_module_demo2.webp": "2d3e" }; // 此处根据module的id值,真正require一个资源 function r(t) { var e = o(t); return a(e) } function o(t) { var e = i[t]; if (!(e + 1)) { var a = new Error("Cannot find module '" + t + "'"); throw a.code = "MODULE_NOT_FOUND", a } return e } r.keys = function () { return Object.keys(i) }, r.resolve = o, t.exports = r, r.id = "ae36" },
"6085","fd3b"等map映射的value值可想而知,是真正的资源id值,其对应的模块映射如下:
6085: function (t, e) { t.exports = "//${你配置的项目publicPath}/img/1_module_demo1.ed6db768.webp" },
当用户触发trigger方法时,根据type和index指定的值,require.context存储的模块资源引用会根据key值找到真正的资源模块,进行require,浏览器会帮助我们下载相应的资源,做到了批量引入后按需加载的想法。
本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript视频教程栏目!
以上是require.context的用法介绍(附示例)的详细内容。更多信息请关注PHP中文网其他相关文章!

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。 1.Python以简洁语法和丰富库生态着称,适用于数据分析和Web开发。 2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

记事本++7.3.1
好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3汉化版
中文版,非常好用