Extjs 如何使开发构建与测试和生产行为相同?

Extjs 如何使开发构建与测试和生产行为相同?,extjs,sencha-cmd,Extjs,Sencha Cmd,在开发应用程序时,我会运行sencha app watch。当然,这会监视文件更改并触发开发构建。因此,现在我可以在浏览器中运行正在开发的应用程序。很好 问题在于sencha应用程序构建测试与开发构建的行为方式不同。区别在于需要需要。如果在开发过程中缺少一个requires,则该应用程序的功能就像它在那里一样 Chrome会发出警告-有时: [W] [Ext.Loader] Synchronously loading 'MyApp.view.Etc'; consider adding Ext.r

在开发应用程序时,我会运行
sencha app watch
。当然,这会监视文件更改并触发开发构建。因此,现在我可以在浏览器中运行正在开发的应用程序。很好

问题在于
sencha应用程序构建测试
与开发构建的行为方式不同。区别在于需要
需要
。如果在开发过程中缺少一个
requires
,则该应用程序的功能就像它在那里一样

Chrome会发出警告-有时:

[W] [Ext.Loader] Synchronously loading 'MyApp.view.Etc'; consider adding Ext.require('MyApp.view.Etc') above Ext.onReady 
在测试构建之后(或类似地,在生产构建之后),这些警告将变成错误,并且应用程序无法运行

是的,在开发期间,应该确保添加了所有的
要求。但是如果我错过了一个,我就有麻烦了——痛苦的“但它在我的机器上工作”综合症

如果我可以告诉
sencha app watch
不要原谅缺少
requires
,或者告诉
sencha app build testing
(或者
production
)做开发构建所做的事情,并推断缺少的
requires
,这就不会是一个问题


如何使开发构建的行为与测试和生产的行为相同?

您无法告诉sencha app build Production
推断缺少的需求,因为sencha只在运行时发现缺少一些必需的类,当JS文件的源代码在应用程序开始搜索的路径上不可用时。这是一个运行时错误,不是编译器错误

因此,您只能通过另一种方式来完成:您可以编辑ExtJS源代码。该警告在
packages\core\src\class\ClassManager.js
中提出,如下所示:

Ext.log.warn("[Ext.Loader] Synchronously loading '" + name + "'; consider adding " +
                 "Ext.require('" + name + "') above Ext.onReady");
你可以改成

Ext.raise("[Ext.Loader] Synchronously loading '" + name + "'; please add " +
                 "'" + name + "' to your requires list");

测试/生产无法推断也就不足为奇了。我们希望能为sencha app watch进行某种切换,而不是更改Ext JS代码。