4

我想将我仔细构建成包的 Dojo JavaScript 代码构建到单个JavaScript 文件中。我对如何做到这一点有点困惑。

现在我有这个:

var profile = {
    ...
    layers: {
        'app': {
            include: [
                'dojo/module1',
                'dojo/module2',
                ...,
                'dojo/moduleN',
                'package2/module1',
                'package2/module2',
                ...,
                'package2/moduleN'
            ]
        }
    }
    ...
};

我真的必须手动将所有模块添加到应用层吗?我不能只说“全部”,或者更好的是,“全部引用”吗?如果我不使用它,我不想包含 dojo/something 模块。此外,在我的发布文件夹中,这就是我想要的全部 - 一个文件。

那么 - 这甚至可以实现吗?清洁 Dojo 将仅引用的模块自动构建到单个(当然是缩小和混淆的)JavaScript 文件中?

4

2 回答 2

3

查看本构建教程的“层”部分中的示例:

也可以创建自定义版本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'] },
    /* ... */
}
于 2013-11-06T16:11:29.723 回答
1

如果您添加的模块已经依赖于其他模块,则不必指定所有模块。例如,如果您在层中包含“app/MainApplication”,则构建器将包含 app/MainApplication 所依赖的所有模块。如果您的 MainApplication.js 涉及项目中的所有内容,那么所有内容都将包括在内。
在构建层期间,dojo 解析每个模块中的 require() 和 define() 调用。然后它构建依赖关系树。Nls 资源也包括在内。在您的代码中,您应该将图层命名为现有包中的文件。在我的构建中,当我用一个单词命名图层时会导致错误。你应该编码

var profile =
   layers: {
     'existingPackage/fileName': {
         ...
      }
   }

如果你想拥有一个文件,你必须在你的层中包含'dojo/dojo'并指定customBase启动标志。

Dojo 总是在构建层之前构建每个包。您的发布目录中将始终有 dojo 和 dijit 文件夹,其中包含缩小版本的 dojo 文件。
只需复制您需要的图层文件并删除其他所有内容。

于 2013-11-07T19:43:05.580 回答