如何从道场层加载 AMD 模块
How to load an AMD Module from a Dojo Layer
在我们的应用程序中,我们将 dojo 用于某些小部件,包括几个自定义小部件,并将 AMD 格式用于多个模块。
例如
define("foo.bar.module", ["dojo/_base/declare"], function(declare) {
var module = declare("foo.bar.module", [], {
// Do Stuff
}
return module;
});
这目前工作正常,因为每个模块都是单独请求的。但是,我们已经确定使用 dojo 层将其折叠为一个请求将是一个很好的优化。
问题是,我们预先加载层,然后尝试要求层中定义的模块,但 dojo 加载器找不到模块。构建配置文件中是否需要特别的东西来使其工作?一些帮助或文档链接将不胜感激。
模块 ID 是路径,而不是对象标识符。define
的第一个论点是错误的;它应该foo/bar/module
它是否会存在。但是,您永远不应该向define
提供第一个字符串参数,因为这会破坏可移植性。也不应提供要declare
的第一个字符串参数,除非您有意尝试在全局范围内创建构造函数。
总之,模块定义应为:
define(["dojo/_base/declare"], function(declare) {
var module = declare([], {
// Do Stuff
}
return module;
});
最后,关于构建层,有两件重要事项需要注意:
- 层只是构建的模块,还包含其他模块。它们只能从生成之前应用程序中已存在的模块创建。例如,如果您有一个用于加载整个应用程序的
app/main
模块,那将是一个很好的图层模块。仅为新层创建新的app/layerA
模块是错误的。 - 加载器无法知道层包含哪些模块,直到加载层。如果你用模块"a"b"和"c"构建层"a",那么
require([ "a", "b", "c" ])
,所有三个模块都将作为单独的请求加载,因为加载器无法知道"a"包含"b"和"c"。在这种情况下,您必须始终先加载"a",然后加载"b"和"c",此时它们将仅从图层加载而不是单独加载。 - 除了在构建配置文件中具有
boot: true
的层(dojo/dojo
)之外,层的加载方式必须与任何其他模块相同,即使用require
或define
,而不是通过包含层模块的<script>
标记。
相关文章:
- 无法加载Ace.js编辑器模式和主题(命名空间项目&AMD require.js&grunt
- Dojo AMD加载程序执行定义具有空/缺失依赖项的回调
- AMD应用程序在浏览器中的加载速度是否快于CommonJS应用程序
- 使用Socket.io的异步模块加载(AMD)
- 我可以在网络工作者中加载AMD模块吗
- 为什么串联的 RequireJS AMD 模块需要一个加载器
- AMD 加载的脚本在镶边中不可见
- 如何从道场层加载 AMD 模块
- 角度AMD加载模块不起作用
- 配置需要 js 才能在 javascript 中加载 AMD 模块
- 未捕获错误:按 require.js 加载非 AMD 脚本时没有定义调用
- RequireJS :处理与填充程序和非AMD加载脚本的jQuery冲突
- 如何使用jspm/system.js正确加载本地AMD模块
- 通过AMD加载微风
- RequireJS-在require流和内联中加载AMD模块
- 淘汰赛3.2-'如果'基于AMD加载组件之间的转换
- 哪些脚本加载程序(AMD或非AMD)用于Backbone.jsUnderscore
- Dojo AMD加载器是否确保模块只执行一次?
- 什么是道场AMD加载顺序
- 选择性加载AMD模块使用需求