我可以使用sencha cmd作为minifycompress吗?

问题描述 投票:0回答:1

我们有一个ExtJS的现代应用程序。 我们想用cmd把我们的代码最小化压缩到一个单一的.js文件中--有效地做了一个非Ext应用程序使用其他minifiers(如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引用可以解决这个问题)。

这可能吗?

extjs sencha-touch sencha-cmd
1个回答
0
投票

好了,为了帮助任何面临同样问题的人,并希望压缩他们的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 工具来对输出进行 minifymangle(或者在上面添加 compress 命令让 cmd 也进行 minify)。 这是一种合理的方式,可以将你的ExtJS代码构建成几个可管理的extjs "模块",这些模块可以在需要的时候(或者在安全允许的情况下)被加载,而不是cmd的 "大爆炸 "方式。

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

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

我知道使用ExtJS的人不多了,希望这能帮助到一些人,在最坏的情况下,它可以让ExtJS的构建过程多一点控制。

© www.soinside.com 2019 - 2024. All rights reserved.