15

Original Question

This maybe a stupid question but is there a way in VS 2013 to unminify JavaScript?

Just making sure we are all on the same page here.

Minify:

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"]?"

That's just an example to make sure we all know what I'm on about. As far as I can tell there is no way to be able to do this. I have only been using VS 2013 for around 3 weeks so there is probably still stuff that is hidden to me.

If there is no way to do this within the program what is the next best thing for this? I did see on another similar post that recommends the site http://jsbeautifier.org/ , so may have to give that ago but would make life easier if it was built into VS 2013

Thanks in advance as I know someone will be able to help me out here.


Update:

I have looked around VS 2013 and found nothing that can help me with this problem, like I said before they maybe some things I have missed (certain settings) so I guess if it cannot be done in VS what's the next best thing for the job? I seem to run into a fair amount of JS that is minifed and would like the quickest and best way to get the job done. I couple sites I have tried seem to have problems with it, is there a program I could install that would just allow me to short cut it with a hot-key or something. That would be pretty handy.


Update 2:

So I think its safe to say this cannot be done within VS2013, or for that matter at all due to missing var names and so on. So I have seen a few links and programs that allow you to format the code. Is there a way to do with within VS2013? And again if not what is the most reliable website/program that I can use to do this. Like I said I can see there have been answers and I appreciate all of them. I will be leaving this question open for a while to get more people to look at it and possibly give a better answer. Keep it up guys!


Update 3:

If anyone has any more information on this please do share. I am still looking around now and then waiting for someone to come up with something amazing for this. One day people.... One day!

Ruddy
  • 9,795
  • 5
  • 45
  • 66
  • 1
    Where is the PHP part of the question ??. Why did you tagged the question with php ? – Dalım Çepiç Oct 02 '13 at 19:30
  • Simply to get more people from all areas to see my question. The more people that see it the better chance I have of getting a better answer. JavaScript can be used with every tag that I put. And the probability is if you know PHP you will know JavaScript. – Ruddy Oct 03 '13 at 07:04
  • Is this a general question or only for VS? – Dmitri Zaitsev Oct 04 '13 at 12:12
  • It was a questions that started with VS and then moved into "general" . If you read what I put in the updates that should have explained it. If not take a look at some of the answers. – Ruddy Oct 04 '13 at 12:14

6 Answers6

7

The thing is that you cannot really "unminify" your code since some data was already lost - e.g. variable names. You can reformat it to more readable form though.

  1. According to this question, since VisualStudio 2012 you can just use Ctrl+E, D keyboard shortcut
  2. If the above is not right, there is this extension for VS 2010: http://visualstudiogallery.msdn.microsoft.com/41a0cc2f-eefd-4342-9fa9-3626855ca22a but I am not sure if it works with VS 2013
  3. There is an extension to VisualStudio called ReSharper which can reformat javascript in a few different manners.
  4. Also there are online formatters already mentioned in other answers (if your code is confidential, I would advise some paranoia manifested by downloading sources and using them locally).
  5. Also you may always try to find unminified version of desired library on the interwebs
  6. Also, there is the WebStorm IDE from JetBrains that is able to reformat JS - you may download a trial for the sole purpose of reformatting your minified scripts :)
  7. If that's just to make debugging easier, you may want to use source maps

Also, here is a bunch of related questions:

How to automatically indent source code? <-- this is for VS2010, but it looks promising, maybe it will help you if it supports JavaScript (and it does since VS2012 according to MS support):

Ctrl+E, D - Format whole doc
Ctrl+K, Ctrl+F - Format selection

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?

I am not sure if they figured out a working way to reformat JS, but I've seen a few answers which might be helpful - I am just pasting this in here just FYI.

Added 03.06.2014:

http://www.jsnice.org/

This tool could be useful too, it even tries to infer minified names. As stated on their website:

We will rename variables and parameters to names that we learn from thousands of open source projects.
Community
  • 1
  • 1
Adam Zielinski
  • 2,774
  • 1
  • 25
  • 36
  • Thank you for your answer, very helpful and a lot of effort put into it. Im going to wait for more people to see this just to find out if anyone else has more information. – Ruddy Sep 30 '13 at 08:42
  • Only just saw the update you posted, that site is pretty cool. Thanks for sharing. – Ruddy Feb 25 '15 at 14:07
5

Its just a one way transformation .... sorry in normal cases you will not get something understandable back from minified JavaScript !

Make just a quick look at JQuery source for a second:

(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",
------

And now at the minify source:

(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", ....

I think now you see it =>

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

So its mapped somehow to make it more shorter look here to minify something People normally use this so there is no way back

you can just format it look here

Community
  • 1
  • 1
pknoe3lh
  • 374
  • 3
  • 10
5

Personally I can't think of a reason to ever unminify code^:

  • If you're using a compiled js file (a-la google closure) and want more readable code to debug, use source maps available for well-supported libraries (speaking of jQuery, if it is served from a google CDN it already maps to the correct source)

  • If you're using a whitespace-only minified js file and want more readable code to debug, you could just toggle pretty print in-browser. This seems to best fit your question.

  • If you're using either of the above and want to modify the source code for a third-party js file, don't. Any future release will cancel out your change - instead consider one of the many patterns to extend a framework (or, perhaps, do some duck punching depending on the exact scenario.)

The other answers seem to cover the "unminification" process (maxification?) well, but it's worth making sure it's a necessary step first.

^ - Except when version control falls over, there are no backups and the only version of the file left is a minified copy in browser cache. Don't ask.

Oleg
  • 24,465
  • 8
  • 61
  • 91
2

If the code has only been minified then the best you can do automatically is reformat to make it more readable. One way of doing this is using an online formatter/beautifier. E.g. Copy and paste the line of code you posted into http://jsbeautifier.org/ or http://www.jspretty.com/ and it'll produce something like this:

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"] ? ""

But of course what these don't do is put any comments that have been removed by the minifier back in. And if the code has also been obfuscated then it will be a lot less readable since the variable names will have changed (e.g. var a instead of var flashVer). See here for further details.

Steve Chambers
  • 37,270
  • 24
  • 156
  • 208
2

As you can see from the other answers, there is no way to reconstitute minified Javascript back into its original form, it is a lossy compression. The best you can do is make it readable by reformatting it.

If the code is open source, then it is likely that the code will exists in a raw state on some form of version control site or as a zip. Why not just download the raw version if available?

Xotic750
  • 22,914
  • 8
  • 57
  • 79
  • As sometimes I seem to run into random JS where there is no other copys. (or none that I can find) thank you for your answer. – Ruddy Sep 30 '13 at 07:06
  • Also, [Komodo IDE](http://www.activestate.com/) has jsbeautify available in its editor. I'm surprised that VS2013 doesn't have a similar plugin system. – Xotic750 Sep 30 '13 at 08:21
1

There is an online tool to unminify Javascripts

http://jsbeautifier.org/

And also for CSS

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

Marvin
  • 371
  • 1
  • 7
  • Thank you for your answer but the first link you gave has been said already and the second is not relevant. Please read other answers before posting your own. – Ruddy Oct 04 '13 at 12:41