Javascript Dojo build 1.7构建包不工作

Javascript Dojo build 1.7构建包不工作,javascript,build,dojo,Javascript,Build,Dojo,我正在开始构建我的项目,我遇到了一些错误,无法理解为什么会发生这些错误 您可以在下面看到my app.profile.js文件的内容。我执行 “build profile=../../app.profile.js-r”命令提示符中的这一行,我在该过程完成后没有收到任何错误。我的问题是,如果我将这些包的发布(构建)版本复制到存在未构建版本的地方,就会出现太多javascript错误,如“Error:multipleDefine”。即使我只复制dojo、dojox和dijit文件夹,同样的错误也会不

我正在开始构建我的项目,我遇到了一些错误,无法理解为什么会发生这些错误

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

当我查看两个js文件的已构建和未构建之间的差异时(例如dojo/Deferred),我意识到的唯一差异是:

//built 
define("dojo/Deferred", [ 
        "./_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" 
            ] 

        } 

    } 
};

这将构建一个层,除了该层中提到的组件外,还需要创建dojox.image.Gallery所需的所有模块

    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"
                    ]
尝试使用
layerDependencies
键而不是
exclude
,我认为exlude在dojo_源代码树中而不是在dojo_发布树中查找应用程序/层/核心。。因此,在构建时,您排除了未知组件

上面的示例是我用来覆盖其他地方丢弃的3个组件的,但是它不适合您的需要

您需要为核心层设置
discard
,而只需将其设置为依赖项(这将排除对层的所有依赖项,这些层已经构建好)

然后,根据您使用的dojo版本,您应该调用
dojo.require(“layers.core”);require(“layers.appcontext”)
require([“layers/core”,“layers/appcontext”],function(){})
以断言这些层存在


在使用依赖项中的任何内容之前,请使用另一个require调用,例如,
dojo.require(“dijit.form.Button”);新的dijit.form.Button({…})。该层将把组件填充到缓存的散列(dojo.cache)中,为了确保它们被完全声明,请拉入需求。

如果您的问题是在AMD模块定义中创建的id(id,[deps],factory)。。 我遇到了类似的问题,我必须手动删除压缩文件上的所有id:

//built 
define([ 
        "./_base/lang", 
        "./promise/CancelError", 
        "./promise/Promise" 
], function()
或者,我必须要求模块使用id

例如,我需要一个模块:

require(["app/Dialog"])
与添加的id不同

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

这是我让它工作的唯一方法。其他人知道如何删除id或为什么我们应该始终拥有id吗?不确定这是否与你的问题有关,但因为你展示了差异

Dojo builder将向每个模块定义添加模块标识符,除非您告诉它不要这样做。这会产生倍增精细误差

从:

插入BSMIDS(默认值=未定义)

  • [truthy]使转换确保每个AMD定义 应用程序包括一个模块标识符参数
  • [falsy]这个 transform对define中的模块标识符参数不做任何处理 应用。特别是,falsy值不会导致 转换以删除中存在的模块标识符参数 源代码
我遇到了完全相同的问题,直到我在我的个人资料中添加了insertAbsMids:false

例如:


谢谢你的回答,现在考虑到你的回答,我正在改变我的图层。但另一件事是,当我从我的配置文件中删除整个layers部分并构建它,然后将dojo、dojox和dijit的构建版本替换为非构建版本时,仍然会出现js错误。所以我认为这不是关于图层部分的错误,我是不是想错了?
require(["demo/app/Dialog"])
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" }
    ]
}