【问题标题】:ExtJS 5 custom build using yui-compressor or other?使用 yui-compressor 或其他的 ExtJS 5 自定义构建?
【发布时间】:2014-12-22 12:46:54
【问题描述】:

我想在一天结束的时候我正在寻找一个相当于旧的 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 版本。

【问题讨论】:

    标签: extjs extjs5 sencha-cmd


    【解决方案1】:

    我想我可能误解了你的问题,但煎茶命令不应该是这样工作的吗?通过将requires 配置添加到一个类,您声明它依赖于另一个类来操作。 Sencha Command 了解这一点,并将为您构建一个包含这些依赖项的文件。但是,如果您有部分构建(因为您似乎表明您这样做是出于安全措施),那么这会变得更加复杂。

    Cmd 允许您进行自定义构建,您可以在此处查看如何执行此操作的部分内容:

    http://docs.sencha.com/cmd/5.x/advanced_cmd/cmd_compiler_reference.html

    IMO 这一切都非常复杂,很少有人需要,但至少它就在那里。就您而言,在该页面的底部,您可以看到“if 指令”的提及,这听起来可能至少部分满足您的要求。您能否将某些代码位包含在指示某种“访问级别”的 if 指令中?

    但是,正如您所说,您可以手动维护所有依赖项 - 这会很痛苦,但我认为可以做到。由于 Ext JS 将所​​有源代码捆绑在单独的文件中,因此您可能会以这种方式生成自定义构建。您也许可以使用 Cmd 生成各种类型的元数据的能力来帮助解决这个问题:

    http://docs.sencha.com/cmd/5.x/advanced_cmd/cmd_metadata.html

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

    【讨论】:

      【解决方案2】:

      您可以在这里使用三种基本方法:

      • 如果不同用户基本上拥有自己的应用程序版本,您可以使用标记,如the Sencha CMD docs 所述(如 Colin Ramsay 的回答中所述)。这将允许您生成应用程序的多个版本,每个版本都缩小并带有适当的子集。然后,您可以在用户登录时将其引导至适当的版本。

      • 如果有只是偶尔使用的重要功能,并且您不想每次都下载它,您可以使用Sencha CMD Packages 创建捆绑和缩小文件。然后可以使用Ext.Loader 即时下载这些内容。请注意,在这种情况下,您需要注意包的要求,因为默认情况下不包含它。

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

      【讨论】:

        猜你喜欢
        • 2011-11-13
        • 2013-05-20
        • 1970-01-01
        • 2013-05-11
        • 2012-05-03
        • 2012-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多