Exclude debug JavaScript code during minification

后端 未结 11 1996
庸人自扰
庸人自扰 2020-11-28 07:16

I\'m looking into different ways to minify my JavaScript code including the regular JSMin, Packer, and YUI solutions. I\'m really interested in the new Google Closure Compil

相关标签:
11条回答
  • 2020-11-28 07:35

    I've used following self-made stuf:

    // Uncomment to enable debug messages
    // var debug = true;
    
    function ShowDebugMessage(message) {
        if (debug) {
            alert(message);
        }
    }
    

    So when you've declared variable debug which is set to true - all ShowDebugMessage() calls would call alert() as well. So just use it in a code and forget about in place conditions like ifdef or manual commenting of the debug output lines.

    0 讨论(0)
  • 2020-11-28 07:38

    I use this in my React apps:

    if (process.env.REACT_APP_STAGE === 'PROD')
      console.log = function no_console() {};
    

    In other words, console.log will return nothing on prod enviroment.

    0 讨论(0)
  • 2020-11-28 07:41

    If you use the Closure Compiler in Advanced mode, you can do something like:

    if (DEBUG) console.log = function() {}
    

    Then the compiler will remove all your console.log calls. Of course you need to --define the variable DEBUG in the command line.

    However, this is only for Advanced mode. If you are using Simple mode, you'll need to run a preprocessor on your source file.

    Why not consider the Dojo Toolkit? It has built-in comment-based pragma's to include/exclude sections of code based on a build. Plus, it is compatible with the Closure Compiler in Advanced mode (see link below)!

    http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t

    0 讨论(0)
  • 2020-11-28 07:46

    I haven't looked into minification so far, but this behaviour could be accomplished using a simple regular expression:

    s/;;;.*//g
    

    This replaces everything in a line after (and including) three semicolons with nothing, so it's discarded before minifying. You can run sed (or a similar tool) before running your minification tool, like this:

    sed 's/;;;.*//g' < infile.js > outfile.js
    

    BTW, if you're wondering whether the packed version or the minified version will be 'better', read this comparison of JavaScript compression methods.

    0 讨论(0)
  • 2020-11-28 07:47

    Here's what I use with Closure Compiler. First, you need to define a DEBUG variable like this:

    /** @define {boolean} */
    var DEBUG = true;
    

    It's using the JS annotation for closure, which you can read about in the documentation.

    Now, whenever you want some debug-only code, just wrap it in an if statement, like so:

    if (DEBUG) {
      console.log("Running in DEBUG mode");
    }
    

    When compiling your code for release, add the following your compilation command: --define='DEBUG=false' -- any code within the debug statement will be completely left out of the compiled file.

    0 讨论(0)
提交回复
热议问题