我看到require.js
支持在document.ready()
被触发时执行代码。见:http://requirejs.org/docs/api.html#pageload
我只是想知道有没有办法让它在调用document.ready()
之前100%执行代码?例如,代码main.js是否在document.ready()事件之前执行?感谢。
答案 0 :(得分:1)
您的请求没有纯粹的RequireJS解决方案。从本质上讲,你要求的是:
我想a)以异步方式加载我的模块,但b)我想同步加载它们。
您使用RequireJS需要a
。 RequireJS是一个用于加载AMD模块的加载器。 AMD代表异步模块定义。如果你使用RequireJS,你必须对它异步操作的事实感到满意。因此,无法保证在文档准备好之前加载和执行任何模块。
要求' b'您需要在文档准备好之前执行代码。除非强制执行模块同步,否则无法做到这一点。 (我已经考虑了延迟 ready
事件的方法,但我认为这种情况一般都不可能。jQuery.holdReady
之类的解决方案不是确实延迟了事件,但只延迟了那些使用jQuery.ready
设置的处理程序。只要浏览器确定它发生但处理程序稍后被解雇,事件仍然会发生。只有jQuery处理程序受到影响什么都没有。)
您可以使用script
元素(不使用async
属性)加载代码,但之后您将无法使用RequireJS。
为RequireJS提供类似的解决方案是使用Almond。您的代码必须构建在一个捆绑包中。你可以同步加载这个包。它基本上与使用script
元素具有相同的效果,但您仍然可以从模块化中受益。请注意,杏仁具有一系列限制。您必须自己决定这些限制是否对您有用。我已经解释了如何同步使用杏仁in this answer。