14

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

我已经阅读了每篇教程、文章和博客文章,试图让 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" ]
    ]
};

...与这种格式:

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 对象变体] 的每个排列。没有任何效果。”

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

最后的问题

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

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

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

更新

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

4

2 回答 2

7

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

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

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

……那么谁先上?

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

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

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

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

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

  • 道场/道场.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
于 2013-03-14T10:37:43.167 回答
6

我最近刚刚经历了这个过程,我完全可以理解你的沮丧。我尝试了 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。我仍然遇到很多错误,但最后,我在发布目录中有我的构建,它似乎工作正常。对我来说,下一步是找出这些错误。我希望这有帮助。

于 2013-03-14T09:19:19.053 回答