Javascript AMD模块成型:如何只加载一个JS函数?

Javascript AMD模块成型:如何只加载一个JS函数?,javascript,typescript,amd,Javascript,Typescript,Amd,许多JavaScript库都有一个构建器工具,它允许您“塑造”所依赖的库的哪些特性,包括客户端的下载带宽成本和实际需要的隔离功能 例如,我喜欢sugar.js中的许多内容,但我根本不需要或不想要片假名和平假名字符集处理。作为最简单的示例,我希望能够将sugar.js“成形”为仅导出string.isBlank() 有没有工具可以帮我做这件事?EcmaScript委员会是否正在努力在未来的JavaScript版本中实现类似的功能?像TypeScript和CoffeeScript这样的高级语言是否为

许多JavaScript库都有一个构建器工具,它允许您“塑造”所依赖的库的哪些特性,包括客户端的下载带宽成本和实际需要的隔离功能

例如,我喜欢sugar.js中的许多内容,但我根本不需要或不想要片假名和平假名字符集处理。作为最简单的示例,我希望能够将sugar.js“成形”为仅导出string.isBlank()

有没有工具可以帮我做这件事?EcmaScript委员会是否正在努力在未来的JavaScript版本中实现类似的功能?像TypeScript和CoffeeScript这样的高级语言是否为这种“成形”提供了隐藏的支持?在C#for.NET DLL中,我可以通过

基本上,在我看来,AMD处理现代编译器的加载器方面,但不处理链接器方面。构建器只为特定模块工作,不是真正的链接器,只是构建器

更新:是一个将JavaScript作为输入并生成JavaScript作为输出的编译器。文档建议使用API调用来完成此操作:

如果将这些导出语句放在一起似乎太单调乏味,可以使用函数为您进行导出。有关导出函数的示例,请参见闭包库函数和


然而,这似乎相当复杂,并使我直接依赖于谷歌闭包编译器。在这一点上,我正在从EcmaScript委员会寻找关于CommonJS的未来标准的信息,以及思考过这个问题并试图解决它的人的智慧。特别是来自同类型脚本开发人员;我不想在TypeScript中为sugar.js创建declare文件,然后对我的TypeScript编译器输出使用googleclosure编译器。这听起来非常复杂,而且很难调试。

不幸的是,Javascript中没有内置任何东西来进行这种“成形”,实际上您需要的是一个编译器,因为它所服务的角色之一是在多个级别上(不仅仅是使用方法)自动进行“成形”

闭包编译器是成熟的、开源的(JQuery实际上是使用闭包编译器缩小的)。因此,如果您要开始为编译器注释JS代码,那么最好是这样


顺便说一句,使用编译器有大量的附带好处。它们将大大减少文件大小(从而减少解释/运行时),而不仅仅是对包含的库进行整形。在开发过程中,它会产生很多有用的信息,以便尽早发现bug。

这是个好问题。我不认为任何工具都能自动做到这一点。JavaScript非常灵活,在运行时或根据应用程序的状态看到函数更改的情况并不少见。。。很难真正轻松地提取函数。因此,我可以向您保证,现在,如果原始作者没有内置选项,您不能使用链接器仅从jQuery中获取
$。每个
。这会来吗?也许吧,但我在不久的将来没有看到。(也许现在在静态分析工具上所做的所有工作都将有助于实现这一目标)这正是我所怀疑的。我看到MS Research的Allen Wirfs Brock和Nikolai Tillman给出了一个例子,其中一个6行的JS代码块单独可能有十几种不同的含义,这取决于解释时输入的变量。因此,为什么我还询问TypeScript和其他支持可选键入的高级语言。谢谢这是尼古拉的例子,摘自他在2010年VMIL会议上的即兴演讲()var sum=0;对于(vari=0;i<1000;i++){if(i==990){sum+=helloworld}sum+=1}打印(sum),只需注意d.ts。已经为您创建了sugar文件:@JcFx是的,sugar.js也有自己的生成器。理想情况下,我会使用sugar.d.ts,然后让链接器忽略我不使用的东西。