解析/解压缩JavaScript

时间:2013-09-26 14:37:06

标签: javascript php jquery html minify

原始问题

这可能是一个愚蠢的问题但在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:

如果有人有任何关于此的更多信息,请分享。我现在仍在四处寻找,然后等待有人为此提出一些惊人的东西。有一天人......一天!

6 个答案:

答案 0 :(得分:7)

问题是你不能真正“解密”你的代码,因为有些数据已经丢失 - 例如变量名。您可以将其重新格式化为更易读的形式。

  1. According to this question,自2012年起的VisualStudio可以只使用控制 + 电子 d 键盘快捷键
  2. 如果以上情况不对,VS 2010有这个扩展程序:http://visualstudiogallery.msdn.microsoft.com/41a0cc2f-eefd-4342-9fa9-3626855ca22a但我不确定它是否适用于VS 2013
  3. VisualStudio有一个名为ReSharper的扩展程序,它可以通过几种不同的方式重新格式化javascript。
  4. 还有在其他答案中已经提到的在线格式化程序(如果您的代码是保密的,我会建议通过下载源并在本地使用它们来表现出一些偏执)。
  5. 您也可以尝试在interwebs
  6. 上找到所需库的未分类版本
  7. 此外,JetBrains的WebStorm IDE可以重新格式化JS - 您可以下载试用版,仅用于重新格式化缩小的脚本:)
  8. 如果只是为了简化调试,您可能需要使用source maps
  9. 此外,这里有一堆相关的问题:

    How to automatically indent source code?< - 这适用于VS2010,但它看起来很有前途,如果它支持JavaScript(and it does since VS2012 according to MS support),它可能对你有帮助:

      

    Ctrl + E D - 格式化整个文档
       Ctrl + K Ctrl + F - 格式选择

    reindent(reformat) minimized jquery/javascript file in visual studio

    Visual Studio 2010 can't format complex JavaScript documents

    Visual Studio code formatter

    how to make visual studio javascript formatting work?

    我不确定他们是否找到了重新格式化JS的工作方式,但我已经看到了一些可能有用的答案 - 我只是在这里粘贴这个只是FYI。

    已于2014年6月3日添加

    http://www.jsnice.org/

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

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

答案 1 :(得分:5)

它只是一种单向转换......对不起,在正常情况下,你不会从缩小的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", ....

我想现在你看到它=&gt;

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

所以它以某种方式映射以使其更短,看起来here来缩小某些东西 人们通常使用这个,所以没有办法回来

你可以格式化它look here

答案 2 :(得分:5)

就我个人而言,我无法想到一个理解代码的理由^:

  • 如果您正在使用已编译的js文件(a-la google closure)并希望更具可读性的代码进行调试,use source maps可用于支持良好的库(说jQuery,如果它已提供)从谷歌CDN它已经映射到正确的来源)

  • 如果您使用的是仅限空白的缩小的js文件,并希望调试更易读的代码,那么您可以toggle pretty print in-browser这似乎最适合您的问题。

  • 如果您正在使用上述任何一项并希望修改第三方js文件的源代码,请不要这样做。任何未来版本都将取消您的更改 - 而是考虑扩展框架的许多模式之一(或者,根据具体情况,可能do some duck punching。)

其他答案似乎涵盖了“统一”过程(最大化?),但值得确保这是首先必要的步骤。

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

答案 3 :(得分:2)

如果代码只是缩小,那么您可以自动执行的最佳操作是重新格式化以使其更具可读性。一种方法是使用在线格式化器/美化器。例如。将您发布的代码行复制并粘贴到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"] ? ""

但当然,这些不做的是将任何已被minifier删除的评论放回去。如果代码也被混淆那么它的可读性会低很多变量名称将更改(例如var a而不是var flashVer)。有关详细信息,请参阅here

答案 4 :(得分:2)

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

如果代码是开源的,那么代码可能会在某种形式的版本控制站点上以zip状态存在于原始状态。为什么不下载原始版本(如果有的话)?

答案 5 :(得分:1)

有一个在线工具来消除Javascripts

http://jsbeautifier.org/

还有CSS

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