Dojo构建1.7内置包不起作用

fac*_*cot 4 javascript dojo build

我正在构建我的项目的开始,我得到一些错误,无法理解为什么他们正在发生.

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

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

//built 
define("dojo/Deferred", [ 
        "./_base/lang", 
        "./promise/CancelError", 
        "./promise/Promise" 
], function( 
Run Code Online (Sandbox Code Playgroud)
define([ 
        "./_base/lang", 
        "./promise/CancelError", 
        "./promise/Promise" 
], function( 
Run Code Online (Sandbox Code Playgroud)

所以我开始时有点卡住了.我想尽快使用图层来减少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" 
            ] 

        } 

    } 
};
Run Code Online (Sandbox Code Playgroud)

Ste*_*son 5

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

构建器文档:

insertAbsMids(default = undefined)

  • [truthy]导致转换以确保每个AMD定义应用程序都包含模块标识符参数.
  • [falsy]转换对define应用程序中的模块标识符参数没有任何作用.特别是,虚假值不会导致转换删除源代码中存在的模块标识符参数.

在我将profileAbsMids:false添加到我的个人资料中之前,我遇到了完全相同的问题.

例如:

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" }
    ]
}
Run Code Online (Sandbox Code Playgroud)