在JavaScript中重命名变量

在JavaScript中重命名变量,javascript,visual-studio,refactoring,automated-refactoring,Javascript,Visual Studio,Refactoring,Automated Refactoring,我一直被一项令人不快的任务所困扰,即“取消统一”一个缩小的JavaScript代码文件。使用JSBeautifier,生成的文件大约有6000行长 通常,变量名和参数名将永久丢失,但在本例中,我有一个原始文件的过时版本,生成缩小的JavaScript代码文件。原始文件的这个过时版本包含大多数代码注释和变量名,但绝对不能替代当前版本 我想知道是否有办法重命名JavaScript中特定参数或变量的所有实例。由于缩小将名称缩减为单个字符,因此查找和替换是不可能的 是否有一些工具,我可以告诉你,在这个文

我一直被一项令人不快的任务所困扰,即“取消统一”一个缩小的JavaScript代码文件。使用JSBeautifier,生成的文件大约有6000行长

通常,变量名和参数名将永久丢失,但在本例中,我有一个原始文件的过时版本,生成缩小的JavaScript代码文件。原始文件的这个过时版本包含大多数代码注释和变量名,但绝对不能替代当前版本

我想知道是否有办法重命名JavaScript中特定参数或变量的所有实例。由于缩小将名称缩减为单个字符,因此查找和替换是不可能的

是否有一些工具,我可以告诉你,在这个文件中,函数
foo
的参数
a
应该是
clientName
,并让它在语义上将该参数的所有实例重命名为
clientName

不幸的是,我在一家拥有批准的软件列表的大型公司工作,在可预见的未来,我一直坚持使用Visual Studio 2010(无VS 2012)


更新:@Kos,我们不使用Git,但我们使用源代码管理。问题是,不再为我的组织工作的开发人员曾经对文件进行了更改,缩小了文件,并且只将缩小的版本签入到源代码管理中,因此他对原始版本的更改已丢失。

您可能有另一种解决方法

查看代码的最后一个未统一版本。与缩小版相比。可以说,它的大部分应该是相同的模一致变量重命名。您将不得不重命名和重新合并这些差异

Diff不会做这种比较;您需要将程序作为代码而不是文本进行比较的工具。我们的SmartDifferenticer工具可以做到这一点(通过使用特定于语言的完整解析器生成AST,然后比较AST);实际上,尽管使用了whitepspacing,它还是会对程序进行比较。SmartDifferenticer还处理重命名;如果两个文件在一次重命名后是相同的,SmartDifferenticer会告诉您这一点


我不知道这项工作的效果如何;我们还没有尝试使用6000行“一致重命名”变量的SmartDifferenticer。

我发现我们在这里许可的一个名为“Telerik JustCode”的Visual Studio扩展具有我想要的功能。

我迟了一年才找到这个答案,但我遇到了与您类似的问题,所以我构建了这个:。它使用UglifyJS2取消统一代码,但使用语音词生成器重命名变量。您可以获得“长”的变量名,因此查找和替换很容易。希望这对其他人有帮助

我希望Git能出现在您组织的列表中,因为它现在可以拯救您:-)。隐马尔可夫模型。。。您可以尝试在两个版本上使用
JSBeautifier
(以统一格式),然后制作一个补丁并有选择地应用它。如果其他更改不大,这将使您的工作自动化一半。您可以签出TypeScript。所有javascript在默认情况下都是TypeScript,所以我假设,在变量重命名方面会有一些帮助——尽管它可能不会跨文件这样做。好消息是VisualStudio是唯一可用于TypeScript AFAIK的IDE。我不会这么快就写出一个查找并替换的解决方案。JS变量仅在以特定方式使用时在表达式中有效。我想你可能会为每个案例做一些查找/替换,并使其工作。从头重写可能更快更好。也许是使用jQuery。@anoopelias:所有javascript默认都是TypeScript?事实并非如此。我不认为这项技术适用于这种情况。