Javascript 在给定依赖项列表的情况下,如何将Dojo构建到单个文件中?
我有一个简单的Dojo应用程序,它只执行一个Javascript 在给定依赖项列表的情况下,如何将Dojo构建到单个文件中?,javascript,build,dojo,Javascript,Build,Dojo,我有一个简单的Dojo应用程序,它只执行一个require调用,加载所有依赖项。问题是,虽然它非常简单,但最终还是从服务器加载了约100个文件。我试图用Dojo构建系统解决这个问题,但似乎我没有足够深入的理解 所以我的问题是-给出一个依赖项列表,如下所示: ["dojo/parser", "dijit/registry", "dojo/dom", "dojo/on", "dojo/query", "dojo/dom-class", "dojo/request", "dijit/fo
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文件?如果您使用dojo的
require()
加载程序,则可以使用这些加载程序组合文件并缩小。据该网站称,构建工具未包含在正式版本中,因此您必须从中获取它们(具体来说,请查看buildscripts
目录)
Dojo文档包含一些关于它的信息,您可能也会发现这些信息很有用
作为概念证明,以下是我采取的步骤:
/opt/dojotoolkit
)/opt/Dojo toolkit
)运行build-util:/util/buildscripts/build.sh action=release-htmlFiles=/path/to/my/index.html
(小心,这会让我5岁的双核变得缓慢)index.html
示例(此示例正好位于dojo toolkit
目录中):
这应该可以做到。基本上,对HTML文件(包含对dojo.js的引用的文件)运行构建实用程序可以确保从顶部开始找到所有依赖项
注意:构建系统使用构建的输出创建一个release
目录,但一开始看起来有点误导-它似乎已经缩小了每个单独的文件,但是如果您查看实际的引导文件(my/test.js
,在本例中),它将是一个组合的、缩小的文件(我假定)运行应用程序所需的一切
否则,如果您使用的是AMD样式
require()
(如require.js中所示),那么您可以使用它的。根据该网站,它将:
require()
调用以确定需要合并哪些文件我需要做同样的事情,我就是这样解决的 如果您阅读了有关如何创建自定义构建()的文档,那么在“层”部分中,他们将讨论如何创建自定义层。您可以在那里添加所需的所有模块。以下是我的自定义图层文件的示例:
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中,以便您可以动态加载其他模块。我使用的是dojo的require,而其构建系统的文档无法帮助我:(我得到了神秘的错误和奇怪的输出。你能给我一个小片段,说明构建概要文件应该是什么样子以及我应该如何调用它吗?@Rogach:用一个小指南更新了答案。我完全按照你的指南做了尝试,它给了我这个错误:
error(349)缺少顶级模块的前缀。顶级模块:fulmar
(我怀疑fulmar
是我的主.js文件,里面有require()
)。你能把index.html
放在什么地方吗?也许我做错了什么。@Rogach:更新了答案。
dojo.require('dijit.ProgressBar');
dojo.require('dijit.Tree');
layers : {
"dojo/dojo" : {
include : [
"dojo/dojo",
"dojo/_base/window",//
"dojo/dom",//
"dojo/dom-class",//
"dojo/ready",//
"dojo/store/Memory"
],
customBase : true,
boot : true
}
}