我可以使用 sencha cmd 至 minify/compress 吗?

Can I use sencha cmd as to minify/compress?

我们有一个 ExtJS 现代应用程序。我们想使用 cmd 将我们的代码 minimize/compress 放入单个 .js 文件中 - 有效地执行非 Ext 应用程序将使用其他压缩器(如 uglifyjs 或 terser)执行的操作。

我相信我们可以通过编译命令实现这一点,例如:

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

但是,它抱怨找不到 Ext classes,并出现如下错误:

[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 class 结构就可以工作,但是可以想不出命令行来实现它(我有点假设 sdk 参考会解决这个问题)。

这可能吗?

好的,帮助那些面临同样问题并想要 compress/minify 他们的 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 或您喜欢的缩小工具 minify/mangle 输出(或将压缩命令添加到上面以允许 cmd 也缩小)。这是将 ExtJS 代码构建到多个可管理的 extjs "modules" 中的合理方法,可以在需要时(或安全允许时)加载这些代码,而不是 cmd 的 "big bang" 方法。

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

Ext.Microloader = {
    run: function(){}
};

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