Dojo 1.8和构建(或缺少)

Phi*_*hix 14 dojo compilation build

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

我已经浏览了每个教程,文章和博客文章,试图获得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" ]
    ]
};
Run Code Online (Sandbox Code Playgroud)

...对比这种格式:

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

两者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.经过一些小的事情,我得到了一个构建的配置文件,给我提供了我需要的东西!

Cra*_*ing 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
            }
        }
    };
})();
Run Code Online (Sandbox Code Playgroud)

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

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

node dojo-release-1.8.3-src/dojo/dojo.js load=build --profile core.profile.js --release --version=1.8.3
Run Code Online (Sandbox Code Playgroud)

我的建议是尝试使用一个非常简单的自定义窗口小部件来完成构建.如果可行,那么你真正的小部件

关于unexpected String,

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


xes*_*sxz 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
Run Code Online (Sandbox Code Playgroud)

应用程序构建配置文件(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
    }
};
Run Code Online (Sandbox Code Playgroud)

在我自己的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
        };
    }
};
Run Code Online (Sandbox Code Playgroud)

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