Dojo 1.8和构建(或缺少)

时间:2013-03-14 08:15:36

标签: build dojo compilation

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

我已经阅读了每个教程,文章和博客文章,试图获得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)人们似乎只是“知道”。我还没有找到任何关于两种语法(syntaxis?syntax's?)之间的差异的文章,它们与新的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。经过一些小的事情,我得到了一个构建的配置文件,让我得到我需要的东西!

2 个答案:

答案 0 :(得分:7)

  

关于使用此格式的大量帖子之间的区别是什么......

您的第一个示例是针对pre 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发布的路径不匹配。)

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

  • 道场/的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来构建。这将在包含构建配置文件的目录中执行。

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

答案 1 :(得分:6)

我刚刚完成了这个过程,我完全理解你的挫折感。我尝试了Dojo Boilerplate没有成功。然后我按照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
    }
};

在我自己的app目录中,我有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
        };
    }
};

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