11

许多 JavaScript 库都有一个 Builder 工具,可以让您“塑造”您所依赖的库的哪些功能,无论是在客户端下载带宽成本方面还是在隔离您实际需要的功能方面。

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

是否有可用的工具为我执行此操作?EcmaScript 委员会是否正在努力在未来版本的 JavaScript 中做类似的事情?有没有像 TypeScript 和 CoffeeScript 这样的高级语言为这种“塑造”提供隐藏的支持?我可以通过monolinker在 C# 中为 .NET DLL 进行这种“整形” 。

基本上,在我看来,AMD 处理现代编译器的加载器方面,但不处理链接器方面。jquerydojo的构建器仅适用于特定模块,并且不是真正的链接器,只是构建器。

更新: Google Closure Compiler是一个将 JavaScript 作为输入并生成 JavaScript 作为输出的编译器。Advanced Compilation and Externs文档建议有一个 API 调用来执行此操作:

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

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

4

1 回答 1

2

不幸的是,Javascript 中没有内置任何东西来执行这种“整形”,无论如何你真正想要的是一个编译器,因为它所服务的角色之一大致是在多个级别上自动“整形”(不仅仅是使用方法)。

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

顺便说一句,使用编译器有很多附带好处。它们将大大减少您的文件大小(从而减少解释/运行时间),而不仅仅是塑造您包含的库。在你开发的时候,它会产生很多有用的信息,以便及早发现错误。

于 2013-05-04T02:27:49.677 回答