Dojo构建到单个文件

时间:2013-11-06 11:30:48

标签: build dojo

我想将我仔细构建到包中的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文件?

2 个答案:

答案 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 只需复制您需要的图层文件,然后删除其他所有图层文件。