2012-06-05 39 views
4

我正在构建我的项目的开始,我收到了一些无法实现它们出现的错误。Dojo构建1.7构建的包不起作用

您可以在下面看到my app.profile.js文件的内容。我从命令提示符执行 "build profile=../../app.profile.js -r"这一行,并且在完成该过程后我没有收到任何错误。我的问题是,如果我将这些软件包的发布(构建)版本复制到未构建版本存在的地方,我会得到太多的javascript错误,如“Error: multipleDefine”。即使我只复制dojo,dojox和dijit文件夹,同样的错误仍然存​​在。

当我看着建未建与JS 2的文件之间的差异,(例如道场/递延)我知道的唯一区别是:

//built 
define("dojo/Deferred", [ 
     "./_base/lang", 
     "./promise/CancelError", 
     "./promise/Promise" 
], function( 

define([ 
     "./_base/lang", 
     "./promise/CancelError", 
     "./promise/Promise" 
], function( 

所以我一开始有点困难。我想尝试尽可能快地使用图层来减少http请求,但我需要一些关于我提到的情况的帮助。任何帮助将不胜感激,谢谢。

app.profile.js:

var profile = { 
    basePath: "..", 
    layerOptimize: "shrinksafe.keepLines", 
    optimize: "shrinksafe", 
    releaseDir: "./release", 
    hasReport: true, 

    packages: [ 
     { 
      name: "dojo", 
      location: "./dojo" 
     }, 

     { 
      name: "dijit", 
      location: "./dijit" 
     }, 

     { 
      name: "app", 
      location: "./app" 
     }, 
     { 
      name: "dtk", 
      location: "./dtk" 
     }, 
     { 
      name: "dojox", 
      location: "./dojox" 
     } 
    ], 

    layers: { 
     "app/layers/core": { 
      include: [ 
         "dojo/_base/declare", 
         "dtk/core/ILifeCycle", 
         "dtk/core/AppConfig", 
         "dtk/core/TopicContext", 
         "dtk/core/NavigationContext", 
         "dojo/require", 
         "dojo/_base/Deferred", 
        "dojo/DeferredList", 
         "dojo/_base/lang" 
      ] 
     }, 
     "app/layers/appcontext": { 
      include: [ 
       "dtk/core/AppContext" 
      ], 
      exclude: [ 
       "app/layers/core" 
      ] 

     } 

    } 
}; 

回答

1

这将生成的层,requiering创建dojox.image.Gallery 除了在discardLayer提到的组件所需的所有模块。

layers: [ { 
        name: "../dojox/discardLayer.js", 
        discard: true, 
        dependencies: [ 
          "dojox.image.Gallery", 
          "dojox.image.SlideShow", 
          "dojox.image.ThumbnailPicker" 
        ] 
      },{ 
        name: "../drops/layer.js", 
        layerDependencies: [ "../dojox/discardLayer.js" ], 
        dependencies: [ 
          "dojox.image.Gallery" 
        ] 

尝试,而不是exclude,使用layerDependencies关键 - 我认为exlude查找应用程序/层/核心从withing您dojo_source树,而不是在dojo_release树。所以在建设的youre排除未知成分的时间。

上面的示例是我曾经能够覆盖3个丢弃的组件在其他地方,但它不适合您的需求。

您将需要设置discard为您核心层,而是简单地将它设置为一个依赖(这将排除所有依赖于层,这媒体链接已建成)。

然后,根据您使用的dojo版本,您应该调用dojo.require("layers.core"); dojo.require("layers.appcontext")require(["layers/core", "layers/appcontext"], function() { });来声明这些图层存在。

在使用其依赖关系中的任何内容之前,通过另一个require调用来拉入需求,例如, dojo.require("dijit.form.Button"); new dijit.form.Button({ ... });。该层将组件填充到缓存哈希(dojo.cache)中,并确保它们已完全声明,并拉入需求。

+0

看到http://stackoverflow.com/questions/1400194/dojo-build-dojo-require-still-needed – mschr

+0

谢谢您的回答,现在我改变了我的层考虑你的回复。但另一件事是当我从配置文件中删除整个图层部分并构建它,然后将构建的dojo,dojox和dijit版本替换为非构建版本时,我仍然收到js错误。所以我认为这不是关于我认为错误的层面的错误? – facot

2

如果你的问题是在AMD模块定义(id,[deps],工厂)创建的ID .. 我有一个类似的问题,我不得不手动删除压缩文件上的所有id :

//built 
define([ 
     "./_base/lang", 
     "./promise/CancelError", 
     "./promise/Promise" 
], function() 

或者,我不得不要求模块使用id来代替。

例如,我需要一个模块:

require(["app/Dialog"]) 

其比ID添加不同。

require(["demo/app/Dialog"]) 

这是我让它工作的唯一方法。任何人都知道如何删除身份证或为什么我们应该总是有一个身份证的原因?不知道这是否与你的问题相关,但是因为你显示了差异。

5

Dojo构建器会为每个模块定义添加一个模块标识符,除非您告诉它不要。这可能会产生multipleDefine错误

builder documentation

insertAbsMids(缺省值=未定义)

  • [truthy]使变换以确保每一个AMD限定 应用包括模块标识符的参数。
  • [falsy] 变换对定义 应用程序中的模块标识符参数没有任何作用。特别是,一个falsy值doe不会导致 转换去除存在于 源代码中的模块标识符参数。

我有,直到我说insertAbsMids完全相同的问题:假我的个人资料。

如:

var profile = { 
    basePath: "./", 
    releaseDir: "release", 
    action: "release", 

    layerOptimize: "shrinksafe", 
    optimize: "shrinksafe", 
    cssOptimize: "comments", 
    mini: false, 
    insertAbsMids: false, 

    packages: [ 
     { name: "dijit", location :"dijit" }, 
     { name: "dojox", location :"dojox" }, 
     { name: "dojo", location :"dojo" } 
    ] 
}