首页 > 代码库 > 翻译 - 【Dojo Tutorials】Part 5 - Build FlickrView for production
翻译 - 【Dojo Tutorials】Part 5 - Build FlickrView for production
原文:Part 5 - Build FlickrView for production
在前面的几篇文章中,我们通过编写HTML, CSS和JavaScript实现了这个FlickrView移动应用。本片文章将专注于为部署更新代码,利用Dojo的构建系统让生产环境应用保持紧凑,并回顾了整个Dojo Mobile驱动的应用。
Dojo Mobile与构建
为Dojo Mobile应用创建一个构建版本是很重的,因为我们想要我们的应用尽可能的小。让我们看逐步了解一下如何创建我们Dojo Mobile应用FlickrView的压缩构建版本。
Dojo的构建系统
典型的构建脚本在Dojo工具集的util/buildscripts目录下,所以,接下来,你本地需要一份Dojo源码的copy。如果还没有,访问这个网址获取:dojotoolkit.org/download。
确认你获取了一份包含util目录的源码。一旦你有了这些,复制dojo,dijit,dojox和util文件夹到你应用的js目录中。你的文件结构看起来大概这个样子的。
构建简介(profile)
让我们为FlickrView创建一个build profile(该怎么叫它呢)。这个build profile是一个配置文件,用于说明这个build包含什么,有那些选项可用。Dojo的构建系统的完整文档在Create Builds tutorial,在这里我们只会简单的介绍一下。
profile开始带有一些选项:
- “basePath” 为profile中所有相关的路径定义基路径
- “action” 对于一个build来说“release”是标准action
- “releaseDir” build的结果输出目录
- “cssOptimize” 这个选项对移动build很有用,因为它可以确保让所有的主题CSS串联起来放入一个文件内
1 var profile = { 2 "basePath": "./", 3 "action": "release", 4 "releaseDir": "../release/js", 5 6 "selectorEngine": "acme", 7 "stripConsole": "normal", 8 "copyTests": false, 9 "cssOptimize": "comments.keeplines",10 "mini": true,11 "optimize": "closure",12 "layerOptimize": "closure",13 14 "localeList": "en-us"
接下来是layers的定义:
在本教程中,只定义了一个layer包含了应用所需要的所有模块。一个layer将会生成一个js文件,对我们来说,定义它作为dojo/dojo layer。它包含了应用所需要的Dojo代码和我们为应用编写的自定义代码。
我们可以把我们的应用批分成多个layers,例如可以一个layer用于Dojo代码,一个用于我们自定的应用代码。但是对于移动应用来说,尤其是在网络上传输,就有些累赘,因为应用在启动是要请求多次(会增加用户等待时间)。出于同样的考虑,我们把本地的代码也包含进一个layer中。
1 layers: { 2 "dojo/dojo": { 3 customBase: true, 4 includeLocales: ["en-us"], 5 include: [ 6 "dojox/mobile/parser", 7 "dijit/registry", 8 "dojox/mobile/compat", 9 "dojox/mobile/ScrollableView",10 "dojox/mobile/ListItem",11 "dojox/mobile/FormLayout",12 "dojox/mobile/TextBox",13 "dojox/moble/RadioButton",14 "dojox/mobile/Heading",15 "dojox/mobile/EdgetoEdgeList",16 "dojox/mobile/RoundRect",17 "dojox/mobile/Switch",18 "dojo/cldr/nls/de/gregorian",19 "dojo/cldr/nls/fr/gregorian",20 "dojo/cldr/nls/it/gregorian",21 "dojo/cldr/nls/ko/gregorian",22 "dojo/cldr/nls/pt/gregorian",23 "dojo/cldr/nls/es/gregorian",24 "dojo/cldr/nls/zh/gregorian",25 "dojo/cldr/nls/zh-hk/gregorian",26 "flickrview/FeedView",27 "flickrview/SettingsView"28 ]29 }30 },
然后我们要定义个特征(features)的集合:
特征是一种分离代码的方式,可以有条件的包含或排除。
例如,我们设置ie特征为undefined:这样的话,说明我们不需要让我们的代码兼容老的ie浏览器,所以我们将任何针对的ie的代码剔除掉:
1 staticHasFeatures: { 2 "dom-addeventlistener": true, 3 "dom-qsa": true, 4 "json-stringify": true, 5 "json-parse": true, 6 "bug-for-in-skips-shadowed": false, 7 "dom-matches-selector": true, 8 "native-xhr": true, 9 "array-extensible": true,10 "ie": undefined,11 "quirks": false,12 "dojo-sync-loader": false,13 "ie-event-behavior": 014 },15 16 packages: [17 { name: "dojo", location: "dojo" },18 { name: "dijit", location: "dijit" },19 { name: "dojox", location: "dojox" },20 { name: "flickrview", location: "flickrview" }21 ]22 };
运行Build
让我们切换到命令行,基于上面的构建配置来构建我们的layers:
Unix
1 cd js/util/buildscripts2 ./build.sh profile=../../flickrview-app.profile.js
Windows
1 cd js\util\buildscripts2 .\build.bat profile=..\..\flickrview-app.profile.js
构建的过程杂糅了Javascript与Java的任务一起。默认的,unix的build.sh脚本使用了nodejs或Rhino。
在Windows的build.bat脚本,只使用了Rhino。但是,这并不意味着不能使用nodejs。下面是手动在命令行设置的脚本内容:
1 .\node ..\..\dojo\dojo.js load=build --profile ..\..\flickrview-app.profile.js
build完成后,到release/js/flickrview目录看看结果。
执行这个build
为了执行新构建的文件,更新flickrview.html文件
首先,修改Dojo的路径,我们使用新构建的dojo.js替换掉原来的。和profile中的dojo/dojo layer一致,结果文件为release/js/dojo/dojo.js,所以我们改变script的标签。我们不需要做其他修改,因为layer已经包含了应用所需的所有的模块。
1 <script type="text/javascript" src="./release/js/dojo/dojo.js"></script>2 <script>3 require([...], function(...) { // existing require calls4 // ... existing code5 });6 </script>
最后,我们的dojoConfig如下:
1 <script type="text/javascript">2 dojoConfig = {3 async: true,4 parseOnLoad: false,5 mblHideAddressBar: true,6 extraLocale: ["en-us", "fr-fr", "de-de", "it-it", "ko-kr", "pt-br", "es-us", "zh-hk"]7 };8 </script>
复习
FlickrView已经完成了。我们为这个简单的移动应用写了模版,样式,代码(Javascript),还build成了产品!
让我们复习一下在创建FlickrView的过程中我们学到了些什么:
- 包含在Dojo Mobile中的基本挂件
- 如何在HTML声明dojox/mobile的挂件并在JavaScript代码中使用他们
- 如何使用dojox/request/script从Flickr获取JSON格式的数据
- 如何去扩展dojox/mobile的挂件
- 遵循最佳实践但是也保证代码紧凑,最小化依赖
- 为dojox/mobile应用build的过程
通过本系列教程,我们可以看到Dojo Mobile是一个杰出的移动应用框架,带有主题,挂件,都和移动设备相匹配。Dojo Mobile也比较好学,扩展和动态填充内容。FlickrView,带有三个视图,非常容易创建,多亏了Dojo Mobile!
翻译 - 【Dojo Tutorials】Part 5 - Build FlickrView for production