解压缩/解压缩 JavaScript


Unminify / Decompress JavaScript

原始问题

这可能是一个愚蠢的问题,但是VS 2013中有没有办法取消JavaScript?

只是确保我们在这里都在同一页面上。

缩小:

var flashVer=-1;if(navigator.plugins!=null&&navigator.plugins.length>0){if(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]){var swVer2=navigator.plugins["Shockwave Flash 2.0"]?"

这只是一个例子,以确保我们都知道我在说什么。据我所知,没有办法做到这一点。我只使用 VS 2013 大约 3 周,所以可能还有一些东西

对我来说是隐藏的。

如果在程序中无法做到这一点,那么下一个最好的办法是什么?我确实在另一篇类似的帖子中看到推荐该网站 http://jsbeautifier.org/,所以可能不得不给出,但如果它内置到 VS 2013 中会让生活更轻松

提前感谢,因为我知道有人可以在这里帮助我。


更新:

我环顾了VS 2013,没有发现任何可以帮助我解决这个问题的东西,就像我之前说的那样,他们可能错过了一些东西(某些设置(,所以我想如果不能在VS中完成,下一步对工作最好的事情是什么?我似乎遇到了相当数量的迷你JS,并且想要最快,最好的方法来完成工作。我尝试过的几个网站似乎有问题,有没有我可以安装的程序,让我用热键或其他东西来快捷方式。那会很方便。


更新 2:

所以我认为可以肯定地说,这不能在VS2013中完成,或者由于缺少var名称等原因而根本无法完成。所以我看到了一些允许您格式化代码的链接和程序。有没有办法在VS2013中做?再说一次,如果不是,我可以用来做到这一点的最可靠的网站/程序是什么。就像我说的,我可以看到有答案,我很感激所有这些答案。我将暂时搁置这个问题,让更多的人看到它,并可能给出更好的答案。伙计们,继续努力!


更新 3:

如果有人对此有任何更多信息,请分享。我现在还在环顾四周,然后等待有人为此想出一些惊人的东西。有一天人....有一天!

问题是你不能真正"缩小"你的代码,因为一些数据已经丢失了 - 例如变量名。不过,您可以将其重新格式化为更具可读性的形式。

  1. 根据这个问题,从VisualStudio 2012开始,你可以只使用Ctrl + E,D键盘快捷键
  2. 如果以上不正确,VS 2010有这个扩展:http://visualstudiogallery.msdn.microsoft.com/41a0cc2f-eefd-4342-9fa9-3626855ca22a 但我不确定它是否适用于VS 2013
  3. VisualStudio有一个名为ReSharper的扩展,它可以通过几种不同的方式重新格式化javascript。
  4. 其他答案中也已经提到了在线格式化程序(如果您的代码是机密的,我会建议通过下载源代码并在本地使用它们来表现出一些偏执(。
  5. 您也可以始终尝试在互联网上找到所需库的未缩小版本
  6. 此外,还有来自 JetBrains 的 WebStorm IDE,它能够重新格式化 JS - 您可以下载试用版,其唯一目的是重新格式化缩小的脚本:)
  7. 如果这只是为了简化调试,则可能需要使用源映射

另外,这里有一堆相关问题:

如何自动缩进源代码? <- 这是针对VS2010的,但它看起来很有希望,如果它支持JavaScript,也许它会帮助你(根据MS支持,它从VS2012开始(:

Ctrl+ED - 设置整个文档
的格式 Ctrl+KCtrl+F - 格式选择

Reindent(reformat( Visual Studio 中最小化的 jquery/JavaScript 文件

Visual Studio 2010 无法格式化复杂的 JavaScript 文档

Visual Studio 代码格式化程序

如何使Visual Studio JavaScript格式化工作?

我不确定他们是否找到了重新格式化 JS 的工作方法,但我看到了一些可能会有所帮助的答案 - 我只是将其粘贴在这里仅供参考。

添加 03.06.2014:

http://www.jsnice.org/

这个工具也很有用,它甚至试图推断缩小的名称。如其网站上所述:

We will rename variables and parameters to names that we learn from thousands of open source projects.

就我个人而言,我想不出取消缩小代码^的理由:

  • 如果您使用的是编译的js文件(a-la google闭包(并且想要调试更多可读的代码,请使用可用于支持良好的库的源映射(说到jQuery,如果它从Google CDN提供,它已经映射到正确的源代码(

  • 如果您使用的是仅空格缩小的 js 文件并希望调试更多可读性代码,您可以在浏览器中切换漂亮的打印。这似乎最适合您的问题。

  • 如果您正在使用上述任一方法,并且想要修改第三方 js 文件的源代码,请不要这样做。任何未来的版本都将取消您的更改 - 而是考虑扩展框架的众多模式之一(或者,也许,根据确切的情况做一些鸭子打孔。

其他答案似乎很好地涵盖了"缩小"过程(最大化?(,但值得首先确保这是必要的一步。

^ - 除非版本控制失败,否则没有备份,文件的唯一版本是浏览器缓存中的缩小副本。不要问。

它只是一个单向转换....抱歉,在正常情况下,您将无法从缩小的JavaScript中得到可以理解的内容!

快速浏览一下JQuery源代码:

(function( window, undefined ) {
// Can't do this because several apps including ASP.NET trace
// the stack via arguments.caller.callee and Firefox dies if
// you try to trace through "use strict" call chains. (#13335)
// Support: Firefox 18+
//"use strict";
var
    // The deferred used on DOM ready
    readyList,
    // A central reference to the root jQuery(document)
    rootjQuery,
    // Support: IE<10
    // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`
    core_strundefined = typeof undefined,
    // Use the correct document accordingly with window argument (sandbox)
    location = window.location,
    document = window.document,
    docElem = document.documentElement,
    // Map over jQuery in case of overwrite
    _jQuery = window.jQuery,
    // Map over the $ in case of overwrite
    _$ = window.$,
    // [[Class]] -> type pairs
    class2type = {},
    // List of deleted data cache ids, so we can reuse them
    core_deletedIds = [],
    core_version = "1.10.2",
------

现在在缩小源:

(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,
l=e.jQuery,u=e.$,c={},p=[],f="1.10.2", ....

我想现在你看到了=>

window       => e
undefined    => t
readyList    => n
rootjQuery   => r
core_strundefined  => i
location     => o
document     => a 

所以它以某种方式映射以使其更短,在这里看起来更短以最小化某些内容人们通常使用它,所以没有退路

你可以在这里格式化它

如果代码只是被缩小了,那么您可以自动做的最好的事情就是重新格式化以使其更具可读性。一种方法是使用在线格式化程序/美化器。例如,将您发布的代码行复制并粘贴到 http://jsbeautifier.org/或 http://www.jspretty.com/中,它将产生如下所示的内容:

var flashVer = -1;
if (navigator.plugins != null && navigator.plugins.length > 0) {
    if (navigator.plugins["Shockwave Flash 2.0"]
            || navigator.plugins["Shockwave Flash"]) {
        var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? ""

但是,当然,这些不会做的是将任何被缩小器删除的评论放回去。如果代码也被混淆了,那么它的可读性会大大降低,因为变量名称会发生变化(例如 var a而不是var flashVer(。有关更多详细信息,请参阅此处。

从其他答案中可以看出,没有办法将缩小的Javascript重建回其原始形式,这是一种有损压缩。您能做的最好的事情就是通过重新格式化来使其可读。

如果代码是开源的,那么代码很可能以原始状态存在于某种形式的版本控制站点上或作为 zip 形式存在。如果可用,为什么不直接下载原始版本?

有一个在线工具可以取消Javascripts。

http://jsbeautifier.org/

也适用于 CSS

http://mrcoles.com/blog/css-unminify/