Sencha-命令-CMD(编译器)(官网文档翻译33)

与第3版煎茶Cmd的新的主要成分之一是编译器。简单地说,编译器是一个JavaScript到JavaScript框架感知优化。它的目的是“理解”的高层次的Ext JS和煎茶触摸代码,并产生最小的,最高效的代码,以支持这些高层次的抽象。

 

 

使用编译器之前,你应该了解的基本知识煎茶Cmd的阅读下面的指南:

集和当前设置

编译器在后台,管理一组的源文件,对这些文件进行分析,以确定它们的依赖关系。该组中的所有文件的类路径

sencha compile -classpath=sdk/src,app ...
..

在这个例子中,编译器递归加载“JS”从指定的文件夹列表。这组中的所有文件的所有操作定义的基础上,遵循(也就是说,它定义了“宇宙”)。

使用的编译器默认的classpath来自这些配置属性:

${framework.classpath},${workspace.classpath},${app.classpath}

编译器的输出的命令(例如,的Concat的元数据)的操作称为“当前设置”上的文件组。目前组开始了宇宙中的所有文件,但使用提供的命令来执行一组操作,这可以被操纵。

注意:使用的编译器,你经常会看到相当长的命令行,使用命令链机制。此外,在实际使用中的情况下,很长的命令行,你应该考虑使用的Ant或“响应文件”。见 先进的煎茶CMD。在本指南中,所有的命令行是完整的(可能很长),以保持尽可能明确的例子。

产生输出CONCAT

编译器最终是所有关于编写有用的输出一定数量的投入。的的 CONCAT命令来连接的当前设置的源文件在适当的依赖顺序。

一个必需的参数是,这表明输出文件的名称。还有其他的选项,但是,效果生成的文件。您可以选择压缩的下列选项之一:

  • -压缩 -压缩生成的文件使用默认的压缩机。目前,这是一样
  • 最大 -使用所有的压缩机压缩生成的文件,并保持最小。
  • -关闭 -压缩使用谷歌暂停办理股份过户编译器生成的文件。
  • 丑化 -使用UglifyJS压缩生成的文件。
  • YUI -使用YUI压缩机压缩的源文件 。
  •  -地带的输出文件的意见,但保留空白。这是用来转换“转所有调试W-comments.js”转变为“EXT-ALL-debug.js”的选项。

下面的命令演示了如何制作三种口味的单次读取源的输出。

sencha compile -classpath=sdk/src \
    exclude -namespaceExt.chart and \
    concat ext-all-nocharts-debug-w-comments.js and \
    -debug=true \
    concat -strip ext-all-nocharts-debug.js and \
    -debug=false \
    concat -yui ext-all-nocharts.js

生成元数据

在许多有用的方法,编译器也可以生成元数据,例如,所有源文件,相关性顺序的一组文件等的名称要了解什么是可用的,看到的生成元数据的指南。

保存和恢复设置

当你需要产生多个输出文件,它可以保存当前的设置以备后用,你这样做是非常有帮助的:

sencha compile -classpath=sdk/src \
    exclude -namespaceExt.chart and \
    save nocharts and \
    ...
    restore nocharts and \
    ...
...

保存命令将当前设置的快照,并将其存储在给定的名称( nocharts在上面)。

最简单的使用已保存的一组是还原命令。这的保存的时间时,执行相反的操作,并恢复它的状态的电流设置为。

SET操作

许多编译器提供的命令归为一组,这是业务工作和生产套。在编译器的情况下,此装置设置的文件或类。让我们先来看看在设定的术语。

稍微设置理论

有三个经典的集合操作:

  • 路口 - 两个集合的交集是一组只包含了两套。

     

  • 联盟 - 两个集合是一组含无论是在套。

     

  • 差异 - 两组的差异是在第一盘,在第二盘的所有东西的集合。

     

设置包括排除

这两个集操作可能是最常见的和灵活的设置操作。两者都支持这些基本的交换机:

  • 命名空间 -匹配所有文件中指定的命名空间中定义类型。
  • 一流的 -匹配一个特定的类型。
  • 文件 -匹配文件名 ​​和/或使用Ant风格的的glob模式(一个“*”匹配文件名 ​​字符,其中“*”匹配文件夹)的文件夹名称。
  • 标签 -匹配任何文件指定的标签(S)(见下文)。
  • 设置 -文件,这些文件在任何指定的命名集。

在所有这些情况下,下面的命令行参数是一个由逗号分隔的列表的匹配条件。此外,单个排除包含可以有许多开关/值对。

所以,让我们从一个简单的例子,建立“转全没有图表调试-W-comments.js” 

sencha compile -classpath=sdk/src \
    exclude -namespaceExt.chart and \
    ...
...

这里正在发生的事情是,我们开始使用的Ext JS源(SDK / src目录“),他们所有的“当前设置”。然后,我们进行了不同的Ext.chart命名空间中的所有文件不包括。目前套,相当于“的ext-all.js”, 但没有任何的图表包。

的否定与包括排除

包括不包括支持一组丰富的匹配条件。这是圆形的开关,否定它后面的匹配条件。这意味着包含的文件或排除所有那些不与条件匹配的。

例如:

sencha compile -classpath=sdk/src,js \
    ... \
    exclude -not-namespaceExtand \
    ...

上述排除命令会从当前组中排除任何的外部命名空间中的类。

所有

在某些情况下,这是非常方便的恢复电流设置为所有文件或为空集。要做到这一点,只需使用包括排除所有开关。要建立在前面的例子:

sencha compile -classpath=sdk/src \
    ... \
    include -all and \
    ... \
    exclude -all and \
    ...

后,包括所有当前的设置是所有文件。后排除一切是空集。

工会

已经所示,包括命令是一个形式,并集:它执行的联合当前的一组与组匹配的文件。有时它是可取的,不包括工会和电流设定在这些文件匹配所需的标准。这是工会命令。

工会命令所有的选项,包括。考虑这个联盟的命令:

sencha compile -classpath=sdk/src ...and \
    union-namespaceExt.grid,Ext.chart and \
    ...

这是这对排除包括命令完全等同于:

sencha compile -classpath=sdk/src ...and \
    exclude -all and \
    include -namespaceExt.grid,Ext.chart and \
    ...

及物性/递归联盟

最重要的业务之一是工会的所有文件明确规定,所有他们所需要的文件。这是核心的构建过程,因为这是你如何只选择您需要的文件集。所以,如果你有顶级文件的一小部分,开始的过程中,说的类MyApp.App,你可以做这样的事情:

sencha compile -classpath=sdk/src,app \
    union-r -classMyApp.Appand \
    ...

工会命令启动无电流设定,只包含类MyApp.App,然后进行包括所有的东西,它需要递归。所产生的电流是应用程序所需的所有文件。

相交(严格)

相交命令是有点不太灵活,它支持的标准:只接受命名集(使用)。

sencha compile -classpath=sdk/src,common,page1/src,page2/src \
    ... \
    intersect -set page1,page2 and \
    ... \

上面这个命令相交的两页设置和产生它们的交点作为当前的一组。

相交(模糊)

在处理二套以上,相交,有一个选项,称为分钟,在当前组的成员设置阈值。此选项Ext JS的应用多页更详细地讨论。

例如,

sencha compile ... \
    intersect -min=2-set page1,page2,page3 and \
    ...

使用的相交产生的当前设置的所有文件,发现在两个指定的三套。

编译器指令

在许多情况下,它是有帮助的,只有编译器将挑选的文件中嵌入元数据。要做到这一点,编译器可以识别的指令行注释。

指令的列表是:

    • //@charset
    • //@tag
    • //@define
    • //@require

字符编码

有没有标准的方法来指定一个特定的JS文件的字符编码​​。煎茶CMD编译器,因此,了解下面的指令:

//@charset ISO-9959-1

这必须是对JS文件的第一行。右边的字符集的值可以是任何有效的Java字符集 名称。默认值是“UTF-8”。

用来描述编译器的输入文件的编码字符集的指令。这并不影响的输出文件的编码。输入文件的内容转换为Unicode内部。

标记

在一个理想的世界中,一个命名空间是足够的兴趣来定义一组。然而,有时候,一组可以很随意,甚至跨越命名空间​​的界限。这个问题,而不是移动到命令行级别,编译器可以跟踪文件中的任意标签。

考虑这个例子:

//@tag foo,bar

分配标签酒吧的文件。这些标签可以被用于包括, 排除工会命令其标签选项。

“其他”的JavaScript文件处理

在某些情况下,JavaScript文件中定义的类或对象,并要求Ext.define需要Ext.require的条款,不表示的类或对象。使用 Ext.define,你仍然可以说,一类需要这样的事情和动态加载程序不会抱怨,只要这些东西存在(如果它们不存在,加载程序将试图加载它们,这很可能会失败)。

为了支持任意JavaScript的方法来定义和要求的类型,编译器还提供了以下指令:

//@define Foo.bar.Thing//@requires Bar.foo.Stuff

这些指令集编译器,跟踪文件中定义的类型和什么类型的文件需要相同的基本元数据。在大多数方面,那么,这些指令完成同样的事情,一个Ext.define一个需要的属性。

您可以使用这些指令在一个文件中,而无需使用其他。

条件编译

编译器支持条件编译指令,如所示:

foo:function(){//<debug>if(sometest){Ext.log.warn("Something is wrong...");}//</debug>this.bar();}

这可能是最有用的条件指令,你会使用的代码,你要在开发环境中运行,而不是在生产。

重要说明:当您使用条件编译,请记住,除非你总是运行编译后的代码,指令只是意见和有条件的代码将是“活”在开发过程中。

调试指令

编译时,默认情况下,没有预处理语句进行检查。因此,在这种情况下,其结果是开发模式。如果我们切换调试我们得到了一个非常相似的结果,但与预处理的活性。事实上,唯一的区别是,除去的预处理器指令。

例如,下面的命令:

sencha compile -classpath=... \
    -debug \
    ...

生成的代码是这样的:

foo:function(){if(sometest){Ext.log.warn("Something is wrong...");}this.bar();}

然而,这个命令:

sencha compile -classpath=... \
    -debug=false \
    ...

生成的代码是这样的:

foo:function(){this.bar();}

你可以看到,测试和log语句都删除。

“如果指令

最普遍的指令是“ 如果“如果指令测试一个或多个配置选项对指令的属性和删除的代码块中,如果有任何错误的。

例如:

//<if debug>//</if>

这是相当于到<debug>指令。

posted on 2012-12-27 10:44 CW.Liu 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/cheman/archive/2012/12/27/2835280.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值