我在我的应用程序中使用 RequireJS,但不太了解它工作的所有方面。
我有 main.js
文件,其中描述了依赖关系。我有 Backbone.Router
组件启动并运行,它触发不同的 application
类(负责创建主视图的类)。一些代码你可以看到here .
我在 requireJS 中看到的:即使一些 View 还没有被“要求”(意味着显式调用 require('./subviews/view)),它仍然被加载并且在它里面加载所有模板(我使用 requireJS文本插件)。如果我正在添加新应用程序但它的 subview 尚未准备好,但我从未使用过该应用程序 - 仍然加载不存在的 subview 并且我收到 404 错误。
不确定我是否解释清楚了所有内容,但希望您明白了。
最佳答案
看起来您正在使用 CommonJS sugared form of define() .请注意,这只是为了方便包装 Node/CommonJS 代码,但 AMD 模块不像 Node 模块那样运行。
AMD 加载器将扫描模块工厂函数中的 require('') 调用,并确保加载所有模块。否则,通过执行 require('./apps/DashboardApp');
同步访问该模块将在浏览器中失败,因为文件 IO 默认是异步网络 IO。
如果你想延迟加载某些脚本,那么你需要使用 require 的回调形式:
require(['./apps/DashboardApp'], function (DashboardApp) {
});
但此调用是异步调用,因此您必须相应地调整模块的公共(public) API。
所以基本上,如果您想按需加载依赖项,则需要 require 的回调形式,考虑到浏览器中文件 IO 的异步性质。
关于javascript - RequireJS 加载我不想加载的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12131840/