2012-06-05 70 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" } 
    ] 
}