Program that takes readable JS code and packs it together for downloading?

Discussion in 'Javascript' started by KenFehling@gmail.com, Dec 23, 2005.

  1. Guest

    Hello. I am wondering if there exists a piece of software that takes
    multiple .js files that are nicely indented and commented and create
    one big tightly packed .js file. I'm hoping the one file would be less
    of a burden for the user's browser to download. I guess the final code
    output by this hypothetical program could maybe even just be on one
    long line unless that would create problems. Maybe there is some kind
    of optimal line length for the computer to read. I've seen some sites
    with some very unreadable .js files with lines hundreds of characters
    long. I figure they must be using some program to make the code that
    way before it gets put on the server. Noone would want to work on code
    that looked like that. I guess I could easily write a small program to
    accomplish this, but I'd rather not reinvent the wheel. Any help with
    this would be greatly appreciated.

    - Ken
    , Dec 23, 2005
    #1
    1. Advertising

  2. Randy Webb Guest

    Re: Program that takes readable JS code and packs it together fordownloading?

    said the following on 12/22/2005 10:53 PM:
    > Hello. I am wondering if there exists a piece of software that takes
    > multiple .js files that are nicely indented and commented and create
    > one big tightly packed .js file. I'm hoping the one file would be less
    > of a burden for the user's browser to download. I guess the final code
    > output by this hypothetical program could maybe even just be on one
    > long line unless that would create problems. Maybe there is some kind
    > of optimal line length for the computer to read. I've seen some sites
    > with some very unreadable .js files with lines hundreds of characters
    > long. I figure they must be using some program to make the code that
    > way before it gets put on the server. Noone would want to work on code
    > that looked like that. I guess I could easily write a small program to
    > accomplish this, but I'd rather not reinvent the wheel. Any help with
    > this would be greatly appreciated.


    http://www.crockford.com/javascript/jsmin.html

    --
    Randy
    comp.lang.javascript FAQ - http://jibbering.com/faq & newsgroup weekly
    Javascript Best Practices - http://www.JavascriptToolbox.com/bestpractices/
    Randy Webb, Dec 23, 2005
    #2
    1. Advertising

  3. Matt Kruse Guest

    wrote:
    > Hello. I am wondering if there exists a piece of software that takes
    > multiple .js files that are nicely indented and commented and create
    > one big tightly packed .js file.


    I have written a PHP function which takes JS code and 'compacts' it
    on-the-fly to be downloaded to the browser.
    I'm far from a PHP expert, but this works for me. You could change to to
    also read in additional files and then compact the whole result.
    It's also not bullet-proof, since some coding styles will surely break the
    output, but it works for me. I always test against the 'compacted' code
    output, so if there are any errors introduced by the compacting I can fix
    them in the original source.

    function js_compact($code) {
    // Remove single-line comments
    $code = preg_replace('|//.*\n|','',$code);
    // Replace tabs with a space
    $code = preg_replace('/\t/'," ",$code);
    // Remove space at the beginning and end of lines
    $code = preg_replace('/\n\s*/',"\n",$code);
    $code = preg_replace('/\s*$/','',$code);
    // Remove empty lines
    $code = preg_replace('/^\s*\n/',"",$code);
    $code = preg_replace('/\n\s*\n/',"\n",$code);
    // Replace whitespace before { or } or ( or )
    $code = preg_replace('/([\S\{\}\(\)])\s*([\{\}\(\)])/',"$1$2",$code);
    // Remove /* comments */
    $code = preg_replace('|\n*/\*.*\*/\n*|s',"",$code);
    // Remove whitepace around { }
    $code = preg_replace('|\s*([\{\}])\s*|s',"$1",$code);
    // Remove whitespace between commands
    $code = preg_replace('|;[\s\n]*|s',";",$code);
    // Put each function on its own line
    $code =
    preg_replace('|([\}\;])(function\s*)(\w+)(\s*)\(|s',"$1\n$2$3$4(",$code);
    // Put each prototype function on its own line
    $code =
    preg_replace('|([\}\;])(\w+\.prototype\.\S+\s*=\s*function)|s',"$1\n$2",$code);
    // Put each class function on its own line
    $code =
    preg_replace('|([\}\;])(\w+\.\S+\s*=\s*function)|s',"$1\n$2",$code);
    // Put return this on a new line
    $code = preg_replace('|(return\s*this;)|s',"\n$1",$code);
    // Add some nice whitespace at the end
    $code = $code . "\n\n";
    return $code;
    }


    --
    Matt Kruse
    http://www.JavascriptToolbox.com
    http://www.AjaxToolbox.com
    Matt Kruse, Dec 23, 2005
    #3
  4. wrote:

    > Hello. I am wondering if there exists a piece of software that takes
    > multiple .js files that are nicely indented and commented and create
    > one big tightly packed .js file.

    [snip]

    Not sure about multiple files, but this is an interesting one:-

    <URL:http://dean.edwards.name/packer/>

    Julian Turner
    Julian Turner, Dec 23, 2005
    #4
  5. zwetan Guest

    Hello,

    > Hello. I am wondering if there exists a piece of software that takes
    > multiple .js files that are nicely indented and commented and create
    > one big tightly packed .js file. I'm hoping the one file would be less
    > of a burden for the user's browser to download. I guess the final code
    > output by this hypothetical program could maybe even just be on one
    > long line unless that would create problems. Maybe there is some kind
    > of optimal line length for the computer to read. I've seen some sites
    > with some very unreadable .js files with lines hundreds of characters
    > long. I figure they must be using some program to make the code that
    > way before it gets put on the server. Noone would want to work on code
    > that looked like that. I guess I could easily write a small program to
    > accomplish this, but I'd rather not reinvent the wheel. Any help with
    > this would be greatly appreciated.
    >


    you can check my build tool Milk (Windows only for now)
    http://www.burrrn.com/projects/Milk.html

    features:
    a.. generate release build from source directory
    a.. filter for authorized/ignored extensions
    a.. use 1 config file
    a.. use 1 build file
    a.. can use unlimited additional config files
    a.. get the SVN repository last revision
    a.. get verbose information about files listing, config files etc.
    a.. compile all files into a single file
    a.. remove comments based on the comment type
    a.. remove unecessary spaces, empty lines, etc.
    a.. can tag the files with build info, file name, date stamp
    a.. can generate the documentation
    a.. can zip all files, developper release files, library release file and
    documentation files
    a.. can normalize special and private comments
    a.. options to modify the comments included in zip files
    etc..

    if people (I mean more than 1) are really interested in more features
    as "all on one single line" I could see into it.

    btw, the tool is written in JavaScript and configured by JavaScript config
    files ;)

    HTH
    zwetan


    ps: here an output log of the tool

    _____ .__.__ __
    / \ |__| | | | __
    / \ / \| | | | |/ /
    / Y \ | |_| < black
    \____|__ /__|____/__|_ \ Math
    ----------\/-------------\/-------------
    Milk: Make include list kit v1.0.5
    Copyright (c) 2003-2005 zwetan Kjukov
    ----------------------------------------
    [Config file: core2.eden,core2_JS.eden]
    ----------------------------------------
    [Build file: src\build_JS.eden]
    ----------------------------------------
    [Release name: core2 v1.0.0 JS]
    ----------------------------------------
    [releaseFile: core2_v1.0.0_JS]
    [Copy files and directories]
    from: src\*.*
    to: release\dev\core2_v1.0.0_JS\*.*
    (ignored extensions: *.txt, *.eden)
    ----------------------------------------
    [Source Entries]
    src\build.eden
    src\build_AS.eden
    src\build_DOC.eden
    src\build_JS.eden
    src\build_JS56.eden
    src\build_JSDB.eden
    src\buRRRn
    src\buRRRn\core2.as1
    src\buRRRn\core2.js
    src\buRRRn\core2.js56
    src\buRRRn\core2.jsdb
    src\buRRRn\core2.txt
    src\buRRRn\core2
    src\buRRRn\core2\Array.es
    src\buRRRn\core2\Boolean.es
    src\buRRRn\core2\Date.es
    src\buRRRn\core2\Error.es
    src\buRRRn\core2\Function.es
    src\buRRRn\core2\ICloneable.es
    src\buRRRn\core2\IComparable.es
    src\buRRRn\core2\IConvertible.es
    src\buRRRn\core2\ICopyable.es
    src\buRRRn\core2\IEquality.es
    src\buRRRn\core2\IFormattable.es
    src\buRRRn\core2\ISerializable.es
    src\buRRRn\core2\NullObject.es
    src\buRRRn\core2\Number.es
    src\buRRRn\core2\Object.es
    src\buRRRn\core2\String.es
    src\buRRRn\core2\_global.es
    ----------------------------------------
    [Release Entries]
    release\dev\core2_v1.0.0_JS\buRRRn
    release\dev\core2_v1.0.0_JS\buRRRn\core2.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Array.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Boolean.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Date.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Error.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Function.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\ICloneable.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\IComparable.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\IConvertible.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\ICopyable.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\IEquality.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\IFormattable.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\ISerializable.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\NullObject.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Number.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Object.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\String.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\_global.js
    ----------------------------------------
    [Removing comments]
    release\dev\core2_v1.0.0_JS\buRRRn\core2.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Array.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Boolean.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Date.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Error.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Function.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\ICloneable.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\IComparable.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\IConvertible.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\ICopyable.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\IEquality.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\IFormattable.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\ISerializable.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\NullObject.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Number.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\Object.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\String.js
    release\dev\core2_v1.0.0_JS\buRRRn\core2\_global.js
    ----------------------------------------
    [Generate library]
    release\lib\core2_v1.0.0_JS.js
    ----------------------------------------
    [Zipping releases]
    core2_v1.0.0_JS_DEV.zip
    core2_v1.0.0_JS_LIB.zip
    ----------------------------------------
    processed in: 0h:0mn:18s:687ms
    ----------------------------------------
    zwetan, Dec 24, 2005
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?Utf-8?B?UU5ndXllbg==?=

    Error loading webform after applying service packs

    =?Utf-8?B?UU5ndXllbg==?=, Oct 21, 2004, in forum: ASP .Net
    Replies:
    0
    Views:
    319
    =?Utf-8?B?UU5ndXllbg==?=
    Oct 21, 2004
  2. Jacob H
    Replies:
    6
    Views:
    422
    Jerry McBride
    May 4, 2004
  3. Great Job
    Replies:
    0
    Views:
    411
    Great Job
    Feb 9, 2008
  4. Scott M.

    ASP .NET AJAX in Service Packs

    Scott M., Mar 15, 2009, in forum: ASP .Net
    Replies:
    1
    Views:
    263
    bruce barker
    Mar 16, 2009
  5. Baba
    Replies:
    71
    Views:
    2,771
Loading...

Share This Page