我想将我仔细构建到包中的Dojo JavaScript代码构建到单个 JavaScript文件中。我对如何做到这一点感到有点困惑。
现在我有了这个:
var profile = {
...
layers: {
'app': {
include: [
'dojo/module1',
'dojo/module2',
...,
'dojo/moduleN',
'package2/module1',
'package2/module2',
...,
'package2/moduleN'
]
}
}
...
};
我是否真的必须手动将所有模块添加到应用层?我不能只说“全部”,或者更好,“所有引用”?如果我不使用它,我不想包含dojo / something modul。此外,在我的发布文件夹中,这就是我想要的 - 一个文件。
那么 - 这甚至可以实现吗?清理Dojo自动构建仅引用的模块到一个(当然缩小和混淆)JavaScript文件?
答案 0 :(得分:3)
查看the Layers section of this build tutorial中的示例:
也可以创建
dojo.js
的自定义版本;这在使用AMD时尤其重要,因为默认情况下(为了向后兼容),构建系统会自动将dojo/main
模块添加到dojo.js
,这会通过加载模块来浪费空间,而代码可能实际上并不存在使用。为了创建dojo.js
的自定义构建,您只需将其定义为单独的图层,将customBase和boot都设置为true:var profile = { layers: { "dojo/dojo": { include: [ "dojo/dojo", "app/main" ], customBase: true, boot: true } } };
您可以通过包含该应用(或模块)的根目录,在单个图层中添加整个“应用”。请注意,如果该应用中的某个模块未明确要求该应用,则必须手动包含该模块。请参阅上面教程的“图层”部分中的第二个示例,以获取相关说明。
如果要更改或自定义项目布局,还可以定义要包含在图层中的包:
packages: [
{name:'dojo', location:'other/dojotoolkit/location/dojo'},
/* ... */
],
layers: {
'dojo/dojo': { include: ['dojo/dojo'] },
/* ... */
}
答案 1 :(得分:1)
如果您添加的模块已经依赖于其他模块,则不必指定所有模块。例如,如果将“app / MainApplication”包含在图层中,则构建器将包含app / MainApplication所依赖的所有模块。如果您的MainApplication.js涉及项目中的所有内容,则会包含所有内容 在构建层期间,dojo会在每个模块中解析require()和define()调用。然后它构建依赖树。 Nls资源也包括在内。 在您的代码中,您应该将图层命名为现有包中的文件。在我的构建中,当我用单个单词命名一个图层时,它会导致错误。你应该编码
var profile =
layers: {
'existingPackage/fileName': {
...
}
}
如果您想要一个exacltly文件,则必须在图层中包含“dojo / dojo”并指定 customBase 和 boot 标记。
Dojo总是在构建图层之前构建每个包。您的发布目录中将始终包含dojo和dijit文件夹,其中包含最小版本的dojo filies 只需复制您需要的图层文件,然后删除其他所有图层文件。