【问题标题】:Dojo 1.8 and builds (or lack thereof)Dojo 1.8 和构建(或缺少)
【发布时间】:2013-03-02 12:01:30
【问题描述】:

我真的不知道从哪里开始。

我浏览了每篇教程、文章和博客文章,试图让 dojo 能够让它发挥作用,但我从来没有遇到过这样的问题,至少只是一点点。我发现文档和工作脚本的人之间存在激烈的争吵,但没有任何发布或概述。在 SO,我发现这是一个非常常见的问题,但有一半的时间没有解决。

免责声明:忘记 1.6。我从来没有用过1.6。因此,我在网上找到的一半资源都是无效的,我的书也是如此。我们开始吧。

问题 1

很多关于使用这种格式的帖子有什么区别:

dependencies = {
    stripConsole: "all",
    action: "release",
    optimize: "shrinksafe",
    // Omitted options...
    layers: [{
        name: "dojo.js",
        customBase : true,
            dependencies: [ 
              "dojox.gauges.AnalogNeedleIndicator",
              "myApp.smartmix"]           
        }
    ],
    prefixes: [
        [ "dijit", "../dijit" ], 
        [ "dojox", "../dojox" ],
        [ "myApp", "../../../myApp" ]
    ]
};

...vs 这种格式:

var profile = {
    basePath: './',
    stripConsole: 'all',
    selectorEngine: 'lite',
    layers: {
        'dojo/dojo': {
            include: ['dojo/dojo', 'dojo/domReady', 'dojo/_base/declare'],
            boot: true,
            customBase: true
        },
        'dgrid/dgrid': {
            include: ["dgrid/List", "dgrid/OnDemandGrid", "dgrid/Selection", "dgrid/Keyboard", "dgrid/test/data/perf"]
        }
    }
    // static-has-features removed
};

layers 对象在两者之间有两个非常重要的区别,要么 A)每个人似乎只是“知道”而没有任何理由或理性,或 B)人们似乎只是“知道”。我还没有找到任何关于这两种语法(语法?语法?)之间差异的文章,这与新的 AMD 结构和构建系统的重写有关。

我见过的最接近的是对象名称无关紧要,声明也无关紧要。它可以是“全局”变量(省略 var 关键字),也可以不是,只要返回的对象包含必要的信息,名称就无关紧要。

第二种格式给我一个“意外字符串”错误,并且 99% 的时间都失败了,即使是复制/粘贴的配置文件也是如此。

问题 2

究竟需要什么?! Dojo 的文档说一个 package.json 和一个 appName.profile.js 文件是必需的,但是在我见过的所有教程中,只需要和使用配置文件。因此,Dojo 的主要网站上有一半关于建筑的信息没有被使用。所以…………?

Dojo 网站说使用src 版本进行构建。 Nabble 的一个人说你必须得到 svn 版本,因为 src 版本已经“构建”了。

...那么谁先上呢?

问题 3

有没有人愿意分享一个工作目录结构和profile.js 文件?我已经尝试了一切。我的意思是一切,得到一个构建。一个建议是使用一个空的配置文件对象。这行得通,而且没用。

另一个建议是使用 dojo 样板构建。如果任何更改破坏了模板,它有什么用? 你尝试了什么是一个有争议的问题,正如我所尝试的,用 Tony Stark 的话来说,“每个已知 [javascript 对象变体] 的每个排列。没有任何效果。”

我很快就会失去信心。不是因为经过数小时的反复试验我无法弄清楚,而是因为很多人都在同一条船上。下沉了。

最后一个问题

所以,我的最后一个请求是,请有人能解释一下这个构建系统是如何工作的,而不仅仅是指向在 Google 上可以找到的已经变紫的阅读和重新阅读链接的链接?

如何...您...配置 Dojo 构建配置文件...并执行它...没有错误?!这个系统的糟糕程度太疯狂了 A) 记录在案和 B) 实施,而我正在使用它 C) 教的。太累了。

我访问过的一些(许多)网站:

更新

非常感谢@xesxz 和@Craig Swing。经过一些小事后,我得到了一个构建配置文件,它可以提供我需要的东西!

【问题讨论】:

    标签: build dojo compilation


    【解决方案1】:

    很多关于使用这种格式的帖子有什么区别...

    您的第一个示例是针对 Dojo 1.7 之前的构建。如果您使用的是 1.7 或更高版本,则需要第二个示例。

    Dojo 网站说要使用 src 版本进行构建。纳布尔的一个人 说你必须得到 svn 版本,因为 src 版本已经是 “建成”。

    ...那么谁先上呢?

    你需要来自http://dojotoolkit.org/download/的SDK

    在页面上它被标记为“来源”。这包含一个 util 目录,其中包含所有构建脚本,以及包含非构建版本的 dojo 文件的其他目录。

    有没有人,任何人,都有一个工作目录结构和 profile.js 文件,他们愿意分享吗?

    我正在从事的项目与@xesxz 发布的项目具有相似的结构。但是,我尝试使用 boot: true, customBase: true 没有成功。以下是我的个人资料。 (我的目录结构有点不同,所以路径与@xesxz 发布的不匹配)。

    在我的应用程序中,我将包含以下内容

    • dojo/dojo.js
    • myCore/core.js
    • myAppModuleX/app.js,其中 X 是我在页面上使用的特定模块。

    core.profile.js(用于构建)

    var profile = (function(){
         var coreRequires = [
            "dojo/_base/declare",
            "dojo/_base/fx",
            "dojo/_base/lang",
            "dojo/currency",
            "dojo/fx",
            "dojo/number",
            "dojo/on",
            "dojo/query",
    
            "dijit/dijit",
    
            "myCore/ACoreWidget"
        ];
    
        return {
            basePath:       "./dojo-release-1.8.3-src",
            releaseDir:     "../../DEV-REL",
            action:         "release",
            cssOptimize:    "comments",
            selectorEngine: "acme",
    
            packages:[{
                name: "dojo",
                location: "dojo"
            },{
                name: "dijit",
                location: "dijit"
            },{
                name: "dojox",
                location: "dojox"
            },{
                name: "myCoreModule",
                location: "../myCore"
            },{
                name: "myAppModule1",
                location: "../myAppModule1"
            },{
                name: "myAppModule2",
                location: "../myAppModule2"
            }],
    
            layers: {
                "myCore/core": {
                    include:    coreRequires
                },
    
                "myAppModule1/app": {
                    include:    [
                        "myAppModule1/WidgetX"
                    ],
                    exclude: coreRequires
                },
    
                "myAppModule2/app": {
                    include:    [
                        "myAppModule2/WidgetY"
                    ],
                    exclude: coreRequires
                }
            }
        };
    })();
    

    您如何...配置 Dojo 构建配置文件...并执行它...没有错误?

    我使用节点来构建。这将在包含构建配置文件的目录中执行。

    node dojo-release-1.8.3-src/dojo/dojo.js load=build --profile core.profile.js --release --version=1.8.3
    

    我的建议是尝试使用非常简单的单个自定义小部件来完成构建。如果这行得通,那么你真正的小部件

    关于unexpected String

    • 您的所有小部件都使用新的 AMD 语法吗?
    • 你有 dgrid,但我相信它依赖于 put-selectorxStyle

    【讨论】:

    • 您确认了我的很多步骤,例如正确的下载、一般配置文件结构等。非常感谢! dgrid 是用尽不同选项后剩下的东西。再也没有收到Unexpected String 错误,不知道它来自哪里。
    【解决方案2】:

    我最近刚刚经历了这个过程,我完全可以理解您的沮丧。我尝试了 Dojo 样板,但没有成功。然后我按照 Dojo 教程进行操作。我的目录是平的,像这样,

     ____app
     |   |__app.profile.js
     |   |__package.json
     |   |__app.js (main js file, which requires other modules)
     |   |__other.js
     | 
     |__dojo
     |__dijit
     |__dojox
     |__util
     |__application.profile.js
    

    应用程序构建配置文件 (application.profile.js) 是从 Dojo Boilerplate 复制而来的,如下所示,

    var profile = {
        basePath: '.',
        action: 'release',
        cssOptimize: 'comments',
        mini: true,
        optimize: 'closure',
        layerOptimize: 'closure',
        stripConsole: 'none',
        selectorEngine: 'acme',
        packages: [
            {name: 'dojo', location: 'dojo'},
            {name: 'dijit', location: 'dijit'},
            {name: 'dojox', location: 'dojox'},
            {name: 'util', location: 'util'},
            {name: 'app', location: 'app'}
        ],
    
        layers: {
            'dojo/dojo': {
                include: ['dojo/i18n', 'dojo/domReady'],
                boot: true,
                customBase: true
            },
            'app/app': {}
        },
        staticHasFeatures: {
            'dojo-trace-api': 0,
            'dojo-log-api': 0,
            'dojo-publish-privates': 0,
            'dojo-sync-loader': 0,
            'dojo-xhr-factory': 0,
            'dojo-test-sniff': 0
        }
    };
    

    在我自己的应用程序目录中,我有 package.json(它指定“dojoBuild”:“package.js”属性)和包构建配置文件 package.js 文件,如下所示,

    var profile = {
    resourceTags: {
        test: function (filename, mid) {
            return false;
        },
        copyOnly: function (filename, mid) {
            return (!/\.js$/.test(filename) && !/\.css$/.test(filename));
        },
        amd: function (filename, mid) {
            return !this.copyOnly(filename, mid) && /\.js$/.test(filename);
        },
    
        miniExclude: function (filename, mid) {
            return mid in {
                'app/package': 1
            };
        }
    };
    

    然后我运行 until/buildscripts/build.sh --profile application.profile.js。我仍然遇到很多错误,但最后,我在发布目录中有我的构建,它似乎工作正常。对我来说,下一步是找出这些错误。 我希望这会有所帮助。

    【讨论】:

    • 感谢您提出并与我一起克服它!巨大的帮助。
    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多