RequireJS加载我没有的资源'我不想

RequireJS loads resources I don't want to

本文关键字:我不想 资源 加载 RequireJS      更新时间:2023-09-26

我在我的应用程序中使用RequireJS,但不太了解它工作的各个方面。

我有main.js文件,其中描述了依赖关系。我已经启动并运行了Backbone.Router组件,它触发了不同的application类(负责创建主视图的类)。你可以在这里看到一些代码。

我可以用requireJS看到的是:即使某些视图还没有被"required"(意味着显式调用require('./sudviews/view)),它仍然被加载,并且在它内部加载所有模板(我使用requireJS文本插件)。如果我正在添加新的应用程序,但它的子视图还没有准备好,但我从未使用过该应用程序——不存在的子视图仍然被加载,我会得到404个错误。

不确定我把每件事都解释清楚了,但希望你们说得对。

看起来您正在使用CommonJS加糖形式的define()。请注意,这只是包装Node/CommonJS代码的一种方便,但AMD模块的操作与Node模块不同。

AMD加载程序将在模块的出厂函数中扫描require(")调用,并确保加载所有模块。否则,通过执行require('./apps/DashboardApp');,对该模块的同步访问将在浏览器中失败,因为文件IO默认为异步网络IO

如果你想延迟加载一些脚本,那么你需要使用require:的回调形式

require(['./apps/DashboardApp'], function (DashboardApp) {
});

但是这个调用是一个异步调用,所以您必须相应地调整模块的公共API。

因此,基本上,如果您想按需加载依赖项,则需要回调形式的require,因为浏览器中文件IO具有异步性质。

因为RequireJS加载所有必需的依赖项。通过快速查看您的代码,我发现您加载了路由模块,并且路由具有:

var ViewManager = require('ViewManager');

这意味着它将加载ViewManager、ViewManager指定的依赖项以及这些模块所需的其他依赖项。本质上,当您包含require(…)时,它与指定依赖关系是一样的。这将由RequireJS转换为

define(['ViewManager'], ...)