在 requirejs 中的 document.ready 之前执行代码

Executing code before document.ready in requirejs

本文关键字:执行 代码 ready requirejs 中的 document      更新时间:2023-09-26

我看到require.js支持在触发document.ready()时执行代码。 请参阅:http://requirejs.org/docs/api.html#pageload

我只是想知道有没有办法在调用document.ready()之前让它 100% 执行代码? 例如,代码 main.js 是否在 document.ready(( 事件之前执行? 谢谢。

没有纯粹的 RequireJS 解决方案可以满足您的请求。从本质上讲,您的要求是:

我想 a( 异步加载

我的模块,但 b( 我想同步加载它们。

需求a是由您正在使用 RequireJS 这一事实引起的。RequireJS是一个加载器,旨在加载AMD模块。AMD 代表 异步模块定义。如果你使用 RequireJS,你必须接受它异步运行的事实。因此,它不能保证任何模块在文档准备就绪之前都会加载和执行。

要求"b"包含在文档准备就绪之前执行代码的要求所包含。这只能通过强制模块的执行同步来完成。(我已经考虑了一些推迟ready事件的方法,但我不认为这通常是可能的。像jQuery.holdReady这样的解决方案并没有真正延迟事件,而只是延迟那些使用 jQuery.ready 设置的处理程序。每当浏览器决定发生时,该事件仍然会发生,但处理程序稍后会被触发。只有jQuery处理程序受到影响,没有其他影响。

您可以使用script元素(不使用 async 属性(加载代码,但这样您将不使用 RequireJS。

一个可以给你类似于RequireJS的解决方案是使用杏仁。您的代码必须构建到单个捆绑包中。您可以同步加载此捆绑包。它基本上具有与使用script元素相同的效果,但您仍然可以从模块化中受益。请注意,杏仁有一系列限制。您必须自己决定这些限制是否对您有问题。我已经在这个答案中解释了如何同步使用杏仁。