本文地址: [http://blog.csdn.net/sushengmiyan/article/details/38316829](http://blog.csdn.net/sushengmiyan/article/details/38316829)
本文作者:sushengmiyan
-------------------------------------------------------------资源链接-----------------------------------------------------------------------
翻译来源 Sencha Cmd官方网站:[http://docs.sencha.com/extjs/5.0.0/cmd/advanced_cmd/cmd_build.html](http://docs.sencha.com/extjs/5.0.0/cmd/advanced_cmd/cmd_build.html)
------------------------------------------------------------------------------------------------------------------------------------------------
Sencha cmd提供的构造脚本是将足见绑定在一起并且是使许多低级命令(像编译)变得自动化,很少有出现适合一个工具满足所有需求的这样的解决方案,所以构造脚本提供了很多可以进行选择的选项让你去配置和客户化的定制这些行为,这个指引将要解释在构造脚本后面的规则以及你可能需要去修改来适应你需求的做法。
阅读本文需要你阅读之前两章的内容
1.[introduction to sencha cmd](http://blog.csdn.net/sushengmiyan/article/details/38295575)
2.[using sencha cmd](http://blog.csdn.net/sushengmiyan/article/details/38313537)
### **工作空间介绍**
-----------------------
本质上来讲,sencha app build 命令执行了基本的校验并且调用 [apache ant ](http://ant.apache.org/) 去构造,构造的脚本可以在”build.xml“文件中查看,该文件就在应用程序的根文件夹下。
![](https://box.kancloud.cn/2016-02-03_56b214e78773c.jpg)
特别的,它会调用脚本中的”build“目标,这意味着全部的过程都可以被检测扩展并且可以修改。
因为sencha app build 简单的调用了ant中”build.xml“中的”build“目标,你可以直接操作ant来达到相同的效果。这对于使用Eclipse或者netbeans的用户来说是很有帮助的
同样的,对于了解ant的来说,集成服务也是可持续的。
生成的”build.xml“ 是最小的一个ant脚本,可以使用ant的import功能来导入”.sencha/app/build-impl.xml“类似的文件任务。由于"build.xml"后期是可能会被修改的,但是”.sencha/app//*-impl.xml“文件是不会被修改的,这些文件会被sencha app upgrade程序给更新替换掉,除非必须否则不要修改这些文件。然而这些文件时非常优秀的,只是修改需要特别留意。
### 构造目标
---------------
下面的目标定义了应用程序构造的产生到结束的整个过程,除了init方法,其他目标都有一个属性可以设置为从1开始的数字。
init refresh resolve js resources sass slice page native-package
除了init其他目标都可以通过前缀增加 skip.的方式来时目标无效。
比如 skip.slice = 1
如果只想更新一部分就可以只想这样的命令,比如只更新sass 可以执行 sencha ant sass就只会构造sass
### **配置你的工作空间**
------------------------------
在sencha app build命令脚本后的许多方面是通过属性来控制的,这样说来,就有两种配置方式,1.通过配置属性来配置,2.通过构造属性来配置
### 1.配置属性
想要看当前配置的信息,可以执行如下命令 sencha diag show
多数情况下,你可以通过前缀告诉他们从何而来。
app. 参照 app,json 和.sencha/app/sencha.cfg
workspace. 参见workspace.json和.sencha/app/sencha.cfg
framework. 参考cmd/sencha.cfg在sencha cmd 安装目录中
cmd.可以再sencha cmd的安装目录看到
使用配置文件是使用比较广泛的也是被advanced sencha cmd推荐的。
### 2.构造配置属性
构造脚本定义了好多其他属性,这些属性都是以build.来结尾的
想看当前的值得话,在你应用程序目录下调用以下命令
sencha ant .props
设置这些build属性
许多方式可以配置你的构造,最简单的方方就是编辑他们的配置属性文件,决定要修改哪一个文件你最好知道这些文件什么时候被调用。
”local.properties“: 目前来说,是第一个载入的,这个文件的设计初衷就是给当前本地机器使用的。这个文件就不应该提交到版本控制中被别人使用,这些设置比其他任何文件优先级都高,
2.”.senche/app/${build.enviroment}.properties“--根基是build.enviroment属性文件,下方的一个会被载入,设置这些文件的属性可以让你从开始构建的时候获取不同的数值
”.sencha/app/native.properties“
".sencha/app/package.properties"
".sencha/app/production.properties"
".sencha/app/testing.properties"
3.".sencha/app/build.properties"
这些属性石在后期加载的,比build-enviroment-specific属性加载的晚一些的,这些属性是被所有的环境变量使用的,这些文件 是被设计为客户化定制使用的。
4.“sencha/app/defaults.properties” 这些属性最后被加载这些文件是被sencha cdm拥有的,并且当有新属性更高的时候这里会更新。这个文件服务了一些属性集,不应该被编辑的,可以修改其他的来达到你的目的。
### **自定义**
----------
许多普遍的需求是通过构造需求的,但是了解所有的方式是不可能的。当配置选项的时候不能达到目的的时候下一个自定义的设置就可以实现了通过“build.xml”文件ant脚本来实现。
另外,对于import命令来说,build.xml包含了一些不同的扩展点,这些都是在可以选择的所有ant 目标和后期命名的过程中的,当你使用-before或者-after时。最常见的前缀扩展点如下:
init(-befor-init -after-init)
refresh(-before-refresh -after-refresh)
resolve(-before-resolve -after-resolve)
js(-before-js -after-js)
resources(-beifore-resources -after-resources)
sass(-before-sass -after-sass)
slice(-befor-slice -after-slice)
page(-befor-page -after-page)
native-package(-native-packege -after-packege)
为了执行增加的before after处理步骤,给build.xml文件增加一个属性 这些目标可以在你的 ant执行的时候被调用
~~~
<target name="-after-page">
<tstamp>
<format property="THISYEAR" pattern="yyyy"/>
</tstamp>
<!--
The build.classes.file property holds the full path to the "all-classes.js"
file so we use that variable rather than hard-code the name.
-->
<move file="${build.classes.file}" tofile="${build.classes.file}.tmp"/>
<concat destfile="${build.classes.file}">
<header filtering="no" trimleading="yes">
/*
* Copyright (C) ${THISYEAR}. All Rights Reserved.
* My Company Name
*/
</header>
<fileset file="${build.classes.file}.tmp"/>
</concat>
<delete file="${build.classes.file}.tmp" />
</target>
~~~
- 前言
- [EXtJS5学习笔记]第一节 Sencha Cmd 学习笔记 简介 Sencha Cmd是什么
- [ExtJS5学习笔记]第二节 Sencha Cmd 学习笔记 使你的sencha cmd跑起来
- [ExtJS5学习笔记]第三节 sencha cmd学习笔记 生成应用程序构建的内部细节
- [ExtJS5学习笔记]第四节 欢迎来到extjs5-手把手教你实现你的第一个应用
- [ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用增加字体图标
- [ExtJS5学习笔记]第六节 Extjs的类系统Class System命名规则及定义和调试
- [ExtJS5学习笔记]第七节 Extjs5的组件components及其模板事件方法学习
- [ExtJS5学习笔记]第八节 Extjs5的Ext.toolbar.Toolbar工具条组件及其应用
- [ExtJS5学习笔记]第九节 Extjs5的mvc与mvvm框架结构简介
- [ExtJS5学习笔记]第十节 Extjs5新增特性之ViewModel和DataBinding
- [ExtJS5学习笔记]第十一节 Extjs5MVVM模式下系统登录实例
- [ExtJS5学习笔记]第十二节 Extjs5开发遇到的问题列表记录
- [ExtJS5学习笔记]第十三节 Extjs5的Ext.each方法学习
- [ExtJS5学习笔记]第十四节 Extjs5中data数据源store和datapanel学习
- [ExtJS5学习笔记]第十五节 Extjs5表格显示不友好?panel的frame属性在作怪
- [ExtJS5学习笔记]第十六节 Extjs5使用panel新增的ViewModel属性绑定数据
- [ExtJS5学习笔记]第十七节 Extjs5的panel组件增加accodion成为折叠导航栏
- [ExtJS5学习笔记]第十八节 Extjs5的panel的dockeditems属性配置toolbar
- [ExtJS5学习笔记]第十九节 Extjs5中通过设置form.Panel的FieldSet集合属性控制多个field集合
- [ExtJS5学习笔记]第二十节 Extjs5配合数组的push方法,动态创建并加载组件
- [ExtJS5学习笔记]第二十一节 Extjs5中使用config配置给ext.widget或者create方法传递参数
- [ExtJS5学习笔记]第二十二节 Extjs5中使用beforeLabelTpl配置给标签增加必填选项星号标志
- [ExtJS5学习笔记]第二十三节 Extjs5中表格gridpanel的列格式设置
- [ExtJS5学习笔记]第二十四节 Extjs5中表格gridpanel或者表单数据后台传输remoteFilter设置
- [ExtJS5学习笔记]第二十五节 利用window.open()函数实现ExtJS5的登陆页面跳转
- [EXTJS5学习笔记]第二十六节 在eclipse/myeclipse中使用sencha extjs的插件
- [ExtJS5学习笔记]第二十七节 CMD打包错误 Error C2009: YUI Parse Error (identifier is a reserved word =&gt; debugger;)
- [ExtJS5学习笔记]第二十八节 sencha ext js 5.1.0发布版本正式发布 extjs doc下载地址
- [ExtJS5学习笔记]第二十九节 sencha ext js 5.1.0中动态更换皮肤主题
- [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总
- [ExtJS5学习笔记]第三十一节 sencha extjs 5使用cmd生成的工程部署到tomcat服务器
- [ExtJS5学习笔记]第三十二节 sencha extjs 5与struts2的ajax交互配置
- [ExtJS5学习笔记]第三十五节 sencha extjs 5 组件查询方法总结