AMD模块整形:如何只加载一个JS函数?

时间:2013-04-25 14:22:50

标签: javascript typescript amd

许多JavaScript库都有一个Builder工具,可以让你“塑造”你所依赖的库的哪些功能,包括客户端的下载带宽成本和隔离你实际需要的功能。

例如,我喜欢sugar.js中的很多东西,但我根本不需要或想要片假名和平假名字符集处理。作为最简单的例子,我希望能够“塑造”sugar.js以仅导出string.isBlank()。

我可以使用这个工具吗?在未来的JavaScript版本中,EcmaScript委员会是否正在继续努力做这样的事情?像TypeScript和CoffeeScript这样的高级语言是否为这种“整形”提供了隐藏的支持?我可以通过monolinker在C#for .NET DLL中进行这样的“整形”。

基本上,我认为AMD像现代编译器一样处理Loader方面,但不处理Linker方面。 jquerydojo的构建器仅适用于特定模块,并不是真正的链接器,只是构建器。

UPDATE: Google Closure Compiler是一个编译器,它将JavaScript作为输入并生成JavaScript作为输出。 Advanced Compilation and Externs文档建议执行API调用:

  

如果将这些导出语句放在一起看起来太单调乏味,您可以使用函数为您进行导出。有关导出函数的示例,请参阅Closure Library函数goog.exportSymbol()goog.exportProperty()

但是,这看起来很复杂,让我直接依赖于Google Closure Compiler。在这一点上,我正在寻找关于EcmaScript委员会关于CommonJS的未来标准的信息,以及那些思考这个问题并试图解决它的人的任何智慧。特别是来自TypeScript开发人员;我不想在TypeScript中为sugar.js创建声明文件,然后对我的TypeScript编译器输出使用Google Closure Compiler。它听起来很复杂,难以调试。

1 个答案:

答案 0 :(得分:2)

不幸的是,Javascript中没有任何东西可以用来“塑造”,而且你真正想要的是编译器,因为它所服务的角色大致是在多个级别自动化“塑造”(不仅仅是方法)

Closure Compiler是成熟且开源的(JQuery实际上是使用Closure Compiler缩小的)。因此,如果您要开始为编译器注释JS代码,那么它也可能就是这个。

使用编译器有很多好处,顺便说一下。它们将减少您的文件大小(以及解释/运行时间),而不仅仅是简化您所包含的库的形成。当你正在开发它时,会产生很多有用的信息来及早发现bug。