这几天我一直在为这件事绞尽脑汁,希望有人能给我指出正确的方向。
在非常大的Flash应用程序中工作,以前在AS2/CS3中,我将有如下设置:
root.swf
-- modules
---- code_a.swf
---- code_b.swf
-- views
---- view_a.swf
---- view_b.swf
使用_exclude.xml
文件,我可以从view_a
和view_b
的输出.swf中排除code_a
和code_b
中定义的类。root.swf
将负责在view_a
或view_b
之前加载代码模块,确保view_a
和view_b
所依赖的类定义存在。
我们最近迁移到使用Actionscript 3/CS5。*_exclude.xml
文件不再存在。为了获得与上面相同的功能,我尝试了以下操作:
我的设置现在看起来像:
root.swf
-- modules
---- class_a.as
---- class_b.as
-- views
---- view_a.swf
---- view_b.swf
使用mxmlc
编译root.swf
, view_a.swf
和view_b.swf
,传递-externs
选项指定将从外部加载的类(modules
中的两个类)。这确保类被排除在编译的swf之外。
使用compc
编译class_a.as
和class_b.as
为classes.swf
,使用-directory=true
访问library.swf
进行外部加载。
然而,当我尝试运行依赖于classes.swf
的两个视图文件之一时,我得到运行时错误告诉我类定义不存在。
当前工作区
我已经设计了一个解决方案,我目前不满意,因为它是向后的模块化方法,我以前使用:
我没有加载代码模块,而是静态地将子影片所需的所有类定义链接到root.swf
中。在构建root.swf
时,我使用mxmlc
的-link-report
选项来提供包含的类列表。当构建子swfs时,我可以使用-load-externs
来确保已经存在的类定义不会包含在编译输出中。
有没有一种方法,任何人都知道复制AS2/_exclude.xml解决方案,我使用AS3/CS5?
我建议将共享库编译为SWCs。
还有其他选项,如RSLs:
http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf674ba-7fff.html WS2db454920e96a9e51e63e3d11c0bf69084-7f1e
希望对你有帮助。