我可以使用 sencha cmd 来缩小/压缩吗?

Posted

技术标签:

【中文标题】我可以使用 sencha cmd 来缩小/压缩吗?【英文标题】:Can I use sencha cmd as to minify/compress? 【发布时间】:2020-06-04 14:06:42 【问题描述】:

我们有一个 ExtJS 现代应用程序。我们想使用 cmd 来最小化/压缩我们的代码到一个单独的 .js 文件中——有效地做一个非 Ext 应用程序对其他压缩器(如 uglifyjs 或 terser)所做的事情。

我相信我们可以通过以下编译命令来实现这一点:

sencha -sdk ext-7.1.0.46 compile -cl=myclassfolder -inp=ES6 concat outfile.js

但是,它抱怨找不到 Ext 类,错误如下:

[ERR] Failed to resolve dependency Ext.data.Model for file myapp.model.mymodel
[ERR] Unknown definition for dependency : Ext.data.Model

这似乎是扩展它不喜欢的 Ext.data.Model 的基本任务,并且非常感觉我只需要正确引用 extJS 类结构即可使其工作,但无法弄清楚命令实现它的行(我有点假设 sdk 引用会解决这个问题)。

这可能吗?

【问题讨论】:

sencha 应用程序构建(开发/生产)为您执行此操作。它将创建一个包含所有依赖项的单个文件 - 如果在开发中调用它将连接,而在生产中它将连接和丑化文件。 谢谢,但我们有一个具有动态类加载的复杂应用程序(出于多客户端配置、性能和安全原因),其中“一体式”煎茶架构不起作用,所以正在寻找以更好地控制缩小过程。不过,我们现在确实有一个解决方案,我将在本周回来为将来的任何人添加该解决方案。 【参考方案1】:

好的,帮助任何面临同样问题并希望压缩/缩小其 ExtJS 但又不创建完整 sencha 应用程序的人。

命令相当简单,答案是在-cl(或-classpath)参数中包含你依赖的js文件的路径,然后排除Ext命名空间:

sencha -sdk stack/Sencha/ext-7.2.0 compile -cl=ext-modern-all.js,packages/ux/modern/ux.js,myclassfolder -inp=ES6 exclude -namespace Ext and concat outfile.js

然后您可以使用 terser 或您喜欢的缩小工具来缩小/修改输出(或将 compress 命令添加到上面以允许 cmd 也缩小)。将您的 ExtJS 代码构建成几个可管理的 extjs“模块”是一种合理的方法,这些模块可以在需要时(或在安全性允许的情况下)加载,而不是 cmd 的“大爆炸”方法。

这将生成一个正确排序的 js 文件,唯一的问题是它包含默认添加的 Ext 微加载器代码。我没有设法让编译器不包含微加载器,但是您可以通过在 ext-all.js 文件的加载和新创建的文件之间定义微加载器来有效地禁用它,方法是使用类似 this is another file 或 inline脚本标签:

Ext.Microloader = 
    run: function()
;

我知道使用 ExtJS 的人已经不多了,希望这对某些人有所帮助,在最坏的情况下,它允许对 ExtJS 构建过程进行更多控制。

【讨论】:

以上是关于我可以使用 sencha cmd 来缩小/压缩吗?的主要内容,如果未能解决你的问题,请参考以下文章

Sencha Cmd中脚本压缩方法之比较

Sencha CMD Linux 命令未找到

为啥 Sencha Touch cmd 中没有视图构建

Sencha cmd,闭包编译错误:如何定位有问题的代码

压缩煎茶触控 App

没有缩小 JS 的 sencha 应用程序构建原生