Build 由于缺少资源,Dojo自定义生成获取浏览器错误

Build 由于缺少资源,Dojo自定义生成获取浏览器错误,build,dojo,amd,dojo-build,Build,Dojo,Amd,Dojo Build,我一直在努力学习基于AMD的Dojo构建系统。到目前为止,我还无法获得一个在浏览器(FF)中没有加载错误的可用构建 我对如何管理构建有疑问 我的构建配置文件有一个packages部分。我在那里指定的内容似乎与写入目标目录的那些相同的包目录直接相关。这似乎是恰当的。但是,我还有一个layers部分,它试图合并来自dojo、dijit、dojox等的“引用”模块。当它们合并到一个dojo.js文件中时,我的目标目录中仍然有所有这些库目录。可以理解为您只是手动进入并删除它们,还是有一种在构建过程中自动

我一直在努力学习基于AMD的Dojo构建系统。到目前为止,我还无法获得一个在浏览器(FF)中没有加载错误的可用构建

我对如何管理构建有疑问

我的构建配置文件有一个packages部分。我在那里指定的内容似乎与写入目标目录的那些相同的包目录直接相关。这似乎是恰当的。但是,我还有一个layers部分,它试图合并来自dojo、dijit、dojox等的“引用”模块。当它们合并到一个dojo.js文件中时,我的目标目录中仍然有所有这些库目录。可以理解为您只是手动进入并删除它们,还是有一种在构建过程中自动删除它们的方法

在我的第一层中,我尝试为dojo、dijit和dojox/app/main构建它。这不会占用任何资源,例如dojo/resources/blank.gif或同一目录中的任何.css文件。如何将这些资源文件复制到目标?我相信dojo.profile.js(它确实表示要复制这些资源)只会影响dojo目录。但由于我正在创建一个结合了js模块的自定义dojo/dijit/dojox文件,所以没有参考资料目录。在自定义构建之后,我是否应该手动进入dojo目录并将dojo/resources目录移出,但丢弃其余的dojo目录?只是不确定在构建dojo/dijit层时,如何获取dojo目录中可访问的依赖img和css文件,以便与自定义dojo.js层文件一起使用

以下是我的构建配置文件:

var配置文件={
基本路径:“./”,
//releaseDir:“irb发布”,
行动:“释放”,
cssOptimize:“评论”,
stripConsole:'所有',
选择发动机:“acme”,
layerOptimize:“闭包”,
优化:“闭包”,
米尼:是的,
套餐:[
{name:“dojo”,位置:“../libs/dojo”},
{名称:“dijit”,位置:“../libs/dijit”},
{名称:“dojox”,位置:“../libs/dojox”},
{name:“dgrid”,位置:“../libs/dgrid”},
{name:“put选择器”,位置:“../libs/put选择器”},
{name:“xstyle”,位置:“../libs/xstyle”},
{名称:“myPkg”,位置:“../libs/myPkg”},
{名称:“irb”,位置:“../irb”}
],
图层:{
“release/irb/libs/dojo”:{
包括:[“dojo/dojo”、“dijit/dijit”、“dojox/app/main”],
靴子:是的,
customBase:正确
},
“release/irb/libs/myPkg”:{
包括:[
“myPkg/dialog/MessageBox”,
“myPkg/grids/FilterGrid”,
“myPkg/util/WidgetMonitor”,
“myPkg/控制器/边界布局”,
“myPkg/controllers/UnloadViewController”
],
includeLocales:[“欧洲-美国”]
},
“release/irb/libs/store/Memory”:{
包括:[“dojo/store/Memory”]
},
“发布/irb/libs/store/Observable”:{
包括:[“dojo/store/Observable”]
},
“内部评级机构/内部评级机构”:{
包括:[
“内部评级机构/内部评级机构”,
“dojox/app/View”,
“dojox/css3/transit”,
“dojox/app/controllers/Load”,
“dojox/app/controllers/Transition”,
“dojox/app/controllers/History”
]
}
},
静态特征:{
//跟踪和日志API用于调试加载程序,因此我们在构建中不需要它们。
“dojo跟踪api”:0,
“dojo日志api”:0,
//这会导致公开通常私有的加载器数据进行调试
//那也是。
“dojo发布隐私”:0,
//这个应用程序是纯AMD的,所以去掉旧的加载器。
“dojo同步加载程序”:0,
//'dojo xhr factory'依赖于'dojo sync loader',我们已将其删除。
“dojo xhr工厂”:0,
//我们不在生产环境中加载测试,所以我们可以去掉一些测试嗅探代码。
“dojo测试嗅探”:0
}
}; 
更新:这是我的目录结构,大致基于dojox/app结构:

/(webroot)
    /irb
        /controllers
        /res
            /css
            /img
        /views
        build.sh
        config.json
        index.html
        irb.js
        package.js
        package.json
        release.profile.js
    /libs
        /dgrid
        /dijit
        /dojo
        /dojox
        /myPkg
        /put-selector
        /util
        /xstyle
对于构建,我使用基于dojox/app示例的build.sh文件,但它调用的内部命令行是:

node "/home/(user)/(project ... path)/(webroot)/libs/dojo/dojo.sh" 
  load=build 
  --require "/home/(user)/(project ... path)/(webroot)/irb/irb.js" 
  --profile "/home/(user)/(project ... path)/(webroot)/irb/release.profile.js"
  --appConfigFile "/home/(user)/(project ... path)/(webroot)/irb/config.json"
  --releaseDir "/home/(user)/(project ... path)/(webroot)/build" 

额外文件和目录

我认为不移除它们是一种很好的做法。执行构建的原因是通过将使用的所有内容组合到几个(最好是一个)javascript文件中来提高web浏览器的性能

但是,如果所使用的文件(模块)未包含在层中,会发生什么情况。如果构建目录中有其他文件,则应用程序仍将工作,您只需对服务器进行额外调用即可获取该文件。如果删除了这些目录和文件,应用程序将中断


利用资源

在完成自定义构建之后,我有一个

release/RELEASE_NAME/dojo/resources 
目录,其中包含您提到的所有资源


编辑:正在添加示例

示例

命令

build.profile.js


dojo构建将整个内容复制到release dir中,它只应用诸如内联CSS和合并JS文件(您的层)之类的修改,但其他所有内容都是完整的。您可以发布目录结构和用于执行构建的命令吗?感谢所有评论和响应的人!这很有帮助!Craig,见我描述中的更新
node path/to/dojo/dojo.js 
    load=build --profile path/to/build.profile.js --release --version=1.9.0
var profile = (function(){
    return {
        // Assuming that the node command is being run in 
        // the webroot directory.  If not, update the basePath
        // to the libs directory using the current directory as
        // the starting point.
        basePath:        "./libs",

        releaseDir:      "/path/to/release/dir",
        action:          "release",
        releaseName:     "release",
        layerOptimize:   "shrinksafe",
        optimize:        false,
        cssOptimize:     "comments",
        mini:            false,
        stripConsole:    "normal",
        selectorEngine:  "acme",

        packages:[
            {name: 'dojo', location: 'dojo'},
            {name: 'dijit', location: 'dijit'},
            {name: 'dojox', location: 'dojox'},
            {name: 'dgrid', location: 'dgrid'},
            {name: 'put-selector', location: 'put-selector'},
            {name: 'xstyle', location: 'xstyle'}
            {name: 'irb', location: '../irb'},
        ],
        layers: {
            'irb/dojo": {
                include: ["dojo/dojo", "dijit/dijit", "dojox/app/main"],
                boot: true,
                customBase: true
            },
            ...
        }
    };
})();