错误:应用dojo构建后defineAlreadyDefined

Posted

技术标签:

【中文标题】错误:应用dojo构建后defineAlreadyDefined【英文标题】:Error: defineAlreadyDefined after applying dojo build 【发布时间】:2013-07-19 12:56:49 【问题描述】:

我按照http://www.sitepen.com/blog/2012/06/11/dgrid-and-dojo-nano-build/ 的说明创建了自己的构建配置文件。我已经为 dojo 创建了引导层:

    'dojo/dojo':          
        include: ['dojo/dojo', 'dojo/domReady', 'dojo/_base/declare'],         
        boot: true,         
        customBase: true    
    ,

我还注意到,如果我跳过这一层的定义,则会创建更大的 dojo 包,因此第二层中包含的模块会被复制。

第二层包含 GridX 模块、dijit 控件以及来自 Dojo 的所有其他使用:

    'dojo/dojo-all': 
        include: ["dojo/on", "dojo/dom-attr", "dojo/dom-class", "dojo/query", "dojo/_base/lang", "dojo/request/xhr", "dojo/parser", "dojo/_base/connect", "dojo/DeferredList", "dojo/store/Memory", "dojo/store/Observable",
        "dijit/registry","dijit/form/TextBox", "dijit/form/Textarea", "dijit/form/ComboBox", "dijit/form/FilteringSelect", "dijit/form/CheckBox", "dijit/form/Button",
        "gridx/core/model/cache/Sync", "gridx/Grid", "gridx/modules/SingleSort", "gridx/modules/ColumnResizer", "gridx/modules/Pagination", "gridx/modules/pagination/PaginationBar", "gridx/modules/CellWidget", "gridx/modules/Edit", "gridx/modules/Persist", "gridx/modules/Filter", "gridx/modules/filter/FilterBar", "gridx/modules/filter/QuickFilter", "gridx/modules/HiddenColumns"],
        exclude: ['dojo/dojo', 'dojo/domReady', 'dojo/_base/declare'],
        boot: true,
        customBase: false
    ,

应用程序正常启动,只对分层资源发出请求,但FireBug控制台出现错误:

错误:defineAlreadyDefined 制造错误() dojo-all.js (Zeile 28)

我认为这是因为declare 模块被加载了两次:首先是使用从 html 文件定义的 dojo.js 引导程序。其次,从dojo-all.js层,通过require动态加载。

我的方法基于引用的文章必须有一些流程,或者该文章已适应旧版本的 Dojo(我使用的是 1.9 版本)。

这里的错误是什么?应该如何正确定义图层?如何指示 dojo build 不要覆盖 dojo.js 引导程序?或者排除没有正确声明——如果是,应该如何声明?

【问题讨论】:

【参考方案1】:

设置boot: true 会导致加载程序被包含在内。仅在要包含define 函数的层上设置boot: true

【讨论】:

以上是关于错误:应用dojo构建后defineAlreadyDefined的主要内容,如果未能解决你的问题,请参考以下文章

为什么ESRI-Dojo应用程序构建包括dgrid和dgrid1包

如何设置包含多个应用程序的 Dojo 构建流程?

避免dojo中的内存泄漏?

如何从AMD dojo创建构建

如何使用简单的 Dojo 1.8 构建?

如何在 file:/// 协议 (Cordova/Phonegap) 下使用来自 dojo 的自定义构建