使用yui压缩器或其他工具定制ExtJS 5?

使用yui压缩器或其他工具定制ExtJS 5?,extjs,extjs5,sencha-cmd,Extjs,Extjs5,Sencha Cmd,我想在一天结束时,我正在寻找一个与旧的ExtJS“构建您自己的”等价的东西。我知道sencha对此表示“不满”,他认为这不是创建应用程序的方法,但我的要求不符合这一点 基本上,我有一个非常大的企业应用程序。将加载到每个客户端的js将根据其用户配置文件、安全访问等而有所不同。这是一个J2EE应用程序,用户配置存储在数据库中 此外,为了防止加载大量未使用的javascript,在用户请求“页面”时,会动态加载每个单独配置所需的脚本。出于各种原因,这对我们来说非常有效,尤其是具有较低安全权限的用户没有

我想在一天结束时,我正在寻找一个与旧的ExtJS“构建您自己的”等价的东西。我知道sencha对此表示“不满”,他认为这不是创建应用程序的方法,但我的要求不符合这一点

基本上,我有一个非常大的企业应用程序。将加载到每个客户端的js将根据其用户配置文件、安全访问等而有所不同。这是一个J2EE应用程序,用户配置存储在数据库中

此外,为了防止加载大量未使用的javascript,在用户请求“页面”时,会动态加载每个单独配置所需的脚本。出于各种原因,这对我们来说非常有效,尤其是具有较低安全权限的用户没有将脚本加载到他们无法使用的浏览器中-服务器端可以管理哪些用户可以下载单个脚本,这可以防止不可信的用户检查脚本以查找漏洞

我们也有许多远程用户使用低带宽和/或移动连接,因此ext-all.js的初始负载大小正在成为一个问题

Sencha cmd不适合我们。它不适合我们的模型,因为它无法扫描所有代码的依赖关系,我需要将ExtJS代码与应用程序代码分离

因此,最终我正在寻找一种方法,通过删除我们不使用的部分来合理地减少ext-all.js的大小。我还想构建自定义版本,服务器端代码可以根据用户配置文件和需求动态选择这些版本(即,移动设备上的裸版与系统管理员的全脂版)。我很高兴能够维护某种依赖列表/脚本,然后通过Sencha Cmd或yui compressor来创建构建文件,但我真的想知道最好的方法是什么。一定有一个构建脚本在某个地方提供ext-all.js-这是我可以修改和减少的东西来满足我的需要吗


或者,是否有一种方法可以配置Sencha Cmd为虚拟“应用程序”生成一个单独的ext.js文件,我在其中为我需要的extjs功能添加了框架代码,它将生成干净的ext.js文件,而不包括虚拟应用程序代码?通过这种方式,如果我在生产代码中使用新的extjs功能,我可以在虚拟应用程序中添加对它的引用,并重新生成新的ext.js版本。

我想我可能误解了你的问题,但Sencha命令不就是这样工作的吗?将
requires
配置添加到一个类中,说明它依赖于另一个类来操作。Sencha命令理解这一点,并将构建一个仅包含这些依赖项的文件。然而,如果您有部分构建(正如您似乎指出的那样,您是作为一种安全措施进行构建的),那么这将变得更加复杂

Cmd确实允许您进行自定义构建,您可以在此处看到部分实现方法:

在我看来,这一切都是愚蠢的复杂,很少有人会需要它,但至少它是存在的。在您的情况下,在该页面的底部,您可以看到“if指令”的提及,听起来它可能满足您的要求,至少部分满足您的要求。您是否可以将某些代码位封装在指示某种“访问级别”的if指令中

然而,正如您所说,您可以手动维护所有依赖关系-这将是痛苦的,但我认为这是可以做到的。由于ExtJS将所有源代码捆绑在单独的文件中,因此您可能可以通过这种方式生成自定义构建。您可以使用Cmd生成各种类型元数据的功能来帮助:


查看“导出文件名”部分,该部分可以让您获得包含应用程序所依赖的类的文件列表。您可以使用Cmd或其他版本进一步处理这些文件。

这里有三种基本方法可供使用:

  • 如果不同的用户基本上都有自己的应用程序版本,那么你可以使用标签,正如Colin Ramsay在回答中指出的那样。这将允许您生成应用程序的多个版本,每个版本都经过缩小并带有相应的子集。然后,您可以在用户登录时将其引导到相应的版本

  • 如果有一些重要的功能只是偶尔使用,并且您不想每次都下载,那么您可以使用创建捆绑和缩小的文件。然后可以使用
    Ext.Loader
    动态下载这些文件。请注意,在这种情况下,您需要注意包需要什么,因为默认情况下不包括它

    • 或者。。。您可以跳过整个“打包应用”模式,使用没有任何依赖项的简单
      ext.js
      文件,并依靠
      ext.requires
      功能动态加载自定义代码。这可以通过制作一个小应用程序来增强,这个小应用程序需要大多数常见的UI小部件&许多模块所共有的数据