我正在尝试使用dojo创建一个构建,这很简单。
我安装的唯一软件包是使用bower的Arcgis-js-api:
]}},
我的build.profile.js定义如下:
"dependencies": {
"esri": "arcgis-js-api#3.21.0"
}
如果我理解构建系统上的dojo文档是正确的,那么应该在dojo / dojo.js下创建一个包含所有依赖项的单个输出文件,但是当我使用此配置文件发出构建时,我收到每个包的文件夹,已经定义了。
app / main包由一个console.log调用组成:
var profile = {
basePath: "./src",
action: "release",
cssOptimize: "comments",
mini: true,
layerOptimize: "closure",
packages: [
"app",
"dijit",
"dojo",
"dojox",
"dstore",
"dgrid",
"dgrid1",
"xstyle",
"put-selector",
"esri", {
name: "moment",
location: "moment",
main: "moment"
}
],
useSourceMaps: false,
mini: true,
stripConsole: "warn",
selectorEngine: "lite",
layers: [{
"dojo/dojo": {
boot: true,
customBase:true,
include: [
"app/main"
]
}
}]
};
我期待只获得一个非常小的版本,因为我基本上没有使用dojo特定的。
我需要更改什么才能获得单个图层的预期效果?在目前的形式下,发布版本仍然是114Mb,这当然太大了。
答案 0 :(得分:1)
在" Creating Builds"教程,它说:
你可能会问自己"如果我们将所需的一切都构建成一个 层,为什么我们担心其余的模块?"如果你是 只保留图层文件而不包含其余模块 可用,你会失去这作为保留你的申请的选项 无需再次进行整个构建即可访问这些工作 模块。
那就是说,我同意你的意见,能够构建一个只包含层的最小分布会很好 - 因为即使浏览器只能下载dojo / dojo.js层,它也很烦人必须分发大100MB目录。
但是,即使构建脚本仅复制了图层文件,这些图层也可能需要各种资源文件,这些资源文件未在AMD依赖关系图中声明(例如图像或字体)。
在我的dojo项目中,我通常采用手动指定和复制所需的最小版本"我的构建脚本末尾的目录。只要它是一个小应用程序,这通常是可管理的。这当然有点烦人且容易出错,所以如果有人知道更好的方式来做你要求的事情,我很乐意听到它。
node ../../dojo/dojo.js load=build --profile "$PROFILE" --releaseDir "$DISTDIR" $@
# ...
FILES=(
index.html
myapp/resources/myapp.css
myapp/resources/logo.svg
dojo/dojo.js
dojo/resources/blank.gif
dijit/themes/claro/form/images/buttonArrows.png
)
for file in ${FILES[*]}; do
mkdir -p $MINIMAL_DIST_DIR/`dirname $file`
cp $DISTDIR/myapp/$file $MINIMAL_DIST_DIR/$file
done
(文件myapp.css @imports
dojo.css等,因此所有CSS都内置在该单个文件中。)
答案 1 :(得分:0)
我不知道这是否有用但我有一种情况,我正在创建一个从完全不同的位置加载到核心dojo应用程序的图层。
这意味着我实际上并不需要dojo
,dijit
和dojox
来构建我的版本。无论是否需要,我都会将所有文件捆绑到我的位置。
我选择的是使用destLocation
将这些文件的目的地更改为我可以忽略的文件夹,该文件夹位于我的应用程序文件夹之外。
所以我在构建脚本中有这个
packages: [
{
name: "dojo",
location: "./dtk/dojo",
destLocation: '../directory/outside/of/codebase/dojo'
},
{
name: "dijit", location: "./dtk/dijit",
destLocation: '../directory/outside/of/codebase/dijit' },
{
name: "dojox",
location: "./dtk/dojox",
destLocation: '../directory/outside/of/codebase/dojox'
},
{
name: "applayer",
location: "./location/of/my/release/folder/",
destLocation: './'
}
],
它并不完美,但它至少会将必要的软件包保存在我的目录之外。我认为将所有文件捆绑到目录中的想法是针对在核心层之外运行require的事件。
如果您在客户端中执行了修补程序,并且您需要一个不在require.cache
中的dojo模块,那么此请求将失败。如果您知道不会发生这种情况,那么您就不需要这些包裹(希望如此)。