此向导介绍了 Sencha Cmd 中的 Workspaces. Workspaces 是为了多个需要共享框架、代码、样式和资源的应用程序而设计的.
前提
推荐先阅读下面的向导:
什么是 Workspace?
开发大型应用程序,首先都是和开发单页应用一样的步骤. 一旦项目扩充到需要多页应用, 一些共同的问题就出现了:
- 使用同一份 framework 框架 (Ext JS and/or Sencha Touch).
- 跨单页应用共享代码
- 共享第三方包 (packages).
为了实现这些目的, Sencha Cmd 引入了“Workspace”这一概念. Workspace就是一个文件夹,包含了framework、多个extjs/touch应用、包packages、共享代码和文件. Workspace根目录的位置应该要满足你的源代码管理的需求. 任何创建在Workspace根目录下的的 应用程序/页面 子目录,不管目录深度,都视为此Workspace的成员 .
虽然不是必须的, 不过一般源码管理仓库的根目录就是Workspace.
Workspace里面的各个单页应用的所处的目录结构,对sencha cmd来说并不重要, 不过接下来的示例中,每个单页应用都是作为Workspace的直接子目录的.
名词解释. “应用程序” 这个词可能会令人困惑,因为它在不同的结构下有不同的意义和范围. 对于Sencha 框架来说, 一个“应用程序”就是一个web页面. 通常政协应用程序通过调用Ext.application()
来加载页面. 如果一个项目需要多页面, 一般这些页面会一起统称为 “应用程序”. 为了这篇向导的需要, 我们用第一种理解:一个页面就是一个应用程序.
创建一个 Workspace
要创建一个 Workspace, 使用下面的cmd命令:
sencha generate workspace /path/to/workspace
会产生下面的目录结构.
workspace.json # 此 Workspace 的 JSON 描述文件
.sencha/ # Sencha 的特定文件 (比如configuration配置)
workspace/ # Workspace 的特定内容 (看下面)
sencha.cfg # Workspace 的配置文件, 用于Sencha Cmd
plugin.xml # Workspace 的 Plugin, 用于Sencha Cmd
配置
和应用程序的配置一样. "app.json"
文件控制单个应用程序, 而 "workspace.json"
文件控制 Workspace 下的所有应用程序.
Framework 的位置
Sencha Ext JS 或 Sencha Touch 的位置 (也即是“SDK” 或者 “framework”) 是作为 Workspace 的一个配置项的. 这让所有应用程序都可以共享这个配置. 不同的开发团队可能设置成不同的位置而不管 Sencha SDK 有没有存放在源码管理系统上. 下面的设置,让你可以控制你的 Workspace 中 Sencha SDK 的位置.
默认情况下, 一个 Workspace 同时具有 Sencha Ext JS 和 Sencha Touch SDK. 这些配置项存放在".sencha/workspace/sencha.cfg"
,内容如下:
ext.dir=${workspace.dir}/ext
touch.dir=${workspace.dir}/touch
workspace.dir
配置由 Sencha Cmd 决定,如果需要可以自行扩展. 换句话说, 默认情况下, 一个 Workspace 包含了 SDK 的副本, 这个 SDK 副本需要被各个应用程序使用.
应用程序通过 framework
配置项来引用 framework, 此配置项在应用程序的"app.json"
文件中:
"framework": "ext"
创建页面
一旦创建了一个Workspace, 就可以像先前说的创建 页面 (“应用程序”) 了,只要使用 “ext” 即可指定SDK框架:
cd apps
sencha -sdk ../ext generate app NewExtApp new-app
或者, 使用 --ext
开关来指定 “ext” 框架而不用担心具体路径:
cd apps
sencha generate app --ext NewExtApp new-app
因为这些应用都创建在 Workspace 里面, 所以有下面的目录结构 (和单页应用结构明显不一样):
workspace.json # 此 Workspace 的 JSON 描述文件
.sencha/ # Sencha 的特定文件 (比如configuration配置)
workspace/ # Workspace 的特定内容 (看下面)
sencha.cfg # Workspace 的配置文件, 用于Sencha Cmd
plugin.xml # Workspace 的 Plugin, 用于Sencha Cmd
ext/ # Ext JS SDK 的副本
...
touch/ # Sencha Touch SDK 的副本
...
extApp/
.sencha/ # Sencha 的特定文件 (比如configuration配置)
app/ # App 的特定内容 (看下面)
sencha.cfg # 配置文件, 用于Sencha Cmd
app.json # App 的 JSON 描述文件
touchApp/
.sencha/ # Sencha 的特定文件 (比如configuration配置)
app/ # App 的特定内容 (看下面)
sencha.cfg # 配置文件, 用于Sencha Cmd
app.json # App 的 JSON 描述文件
build/ # build输出目录.
production/ # build production输出目录
touchApp/
extApp/
testing/ # build testing输出目录
touchApp/
extApp/
项创建更多页面, 重复上面的命令即可.
打包应用程序
打包一个和多个应用程序的过程没有区别. 进入到各个应用程序目录下,执行:
sencha app build
效率起见, 你可以创建一个批处理.
包 Packages
Sencha Cmd 提供了很强大的包管理功能,可以用来下载并集成JavaScript, 样式和文件包到你的应用程序中.
workspace.json # 此 Workspace 的 JSON 描述文件
packages/ # shared Cmd 包的目录
local/ # 本地创建的包
remote/ # 网上下载的包
通常, "packages/remote"
目录会被源码管理器忽略,因为它们总是可以从网上下载到.
注意: 以前发布的版本中, 所有的包都位于 "packages"
目录下. 这种分离(大多数情况下都对项目有帮助), 可以在 "workspace.json"
里面改.
下一步
推荐先阅读下面的向导: