我有一个简单的Dojo应用程序,但这只是一个require
调用加载所有的依赖关系。 麻烦的是,虽然它是非常简单,它仍然从服务器最终装载〜100个文件。 我试图解决使用Dojo构建系统的问题,但似乎我没有足够深的理解。
所以我的问题是 - 给依赖列表,如下所示:
["dojo/parser",
"dijit/registry",
"dojo/dom",
"dojo/on",
"dojo/query",
"dojo/dom-class",
"dojo/request",
"dijit/form/ValidationTextBox",
"dijit/form/Select",
"dijit/form/NumberSpinner",
"dijit/form/CheckBox",
"dijit/layout/ContentPane",
"dijit/Dialog",
"dojo/NodeList-traverse",
"dojo/domReady"]
我该如何建立构建以创建单个文件(或多个文件,只是没有100文件)道场文件?
如果您使用Dojo的require()
装载机,有构建工具 ,你可以用它来合并文件,然后再缩小。 据现场,构建工具不包括在正式发布,所以你必须从一开始他们的开发版本 (具体看在buildscripts
目录)。
道场文档中包含的一些信息构建系统 ,您还可以找到有用的。
作为概念验证 ,这里是我采取的步骤:
前往下载页面 ,并下载源代码Dojo Toolkit的SDK(它是包含所需要构建的UTIL脚本唯一的一个)。
提取到一个位置(这个职位的缘故,让我们说这是/opt/dojo-toolkit
)。
从Dojo工具包目录 (即/opt/dojo-toolkit
),运行构建UTIL: ./util/buildscripts/build.sh action=release htmlFiles=/path/to/my/index.html
(小心,这放慢我的5岁的双核到爬行)
的实施例index.html
(这个人是完全内部dojo-toolkit
目录):
...
<head>
<script src="dojo/dojo.js"></script>
<script>
dojo.require("my.test");
</script>
</head>
...
该require()
调用看起来嵌套模块(我无法得到它与一个顶层模块工作),所以在这种情况下,我有my
的目录里面dojo-toolkit
包含一个test.js
文件。 该文件是在加载所有依赖的主要“引导”文件。 我刚一放就乱require()
调用我的:
dojo.require('dijit.ProgressBar');
dojo.require('dijit.Tree');
这应该这样做。 基本上,运行针对您的HTML文件(包含引用的dojo.js之一)的构建工具可以确保所有的相关性发现,从顶部开始。
注 :构建系统创建一个release
与内置输出目录,但它看起来有点起初误导-这似乎已经过压缩每个单独的文件,但如果你看看你的实际的引导文件( my/test.js
,在这情况下),这将是一个组合,精缩用(我相信),你需要运行你的应用程序的一切文件。
否则,如果你使用AMD的风格require()
的(如在require.js),你可以使用它的优化工具 。 据该网站,它会:
将所有相关文件(包括require.js本身)到一个文件中。 分析了require()
调用找出哪些文件需要相结合。
无论是使用UglifyJS(默认)或关闭编译压缩JavaScript。
我需要做同样的事情,这是我如何解决它。
如果你了解如何创建自定义建立的文档( http://dojotoolkit.org/documentation/tutorials/1.8/build/ ),在他们谈论创建自定义图层图层部分。 您可以添加你需要的任何的所有模块。 这是我的定制层文件的例子:
layers : {
"dojo/dojo" : {
include : [
"dojo/dojo",
"dojo/_base/window",//
"dojo/dom",//
"dojo/dom-class",//
"dojo/ready",//
"dojo/store/Memory"
],
customBase : true,
boot : true
}
}
这是什么会做的是建立只有那些模块插入的dojo.js,与引导加载程序一起,这样就可以在飞行中加载其他模块。