Skip to main content

SlimIt - JavaScript minifier

Project description

SlimIt is a JavaScript minifier written in Python. It compiles JavaScript into more compact code so that it downloads and runs faster.

SlimIt also provides a library that includes a JavaScript parser, lexer, pretty printer and a tree visitor.

Let’s minify some code

From the command line:

$ slimit -h
Usage: slimit [input file]

If no input file is provided STDIN is used by default.
Minified JavaScript code is printed to STDOUT.

$ cat test.js
var a = function( obj ) {
        for ( var name in obj ) {
                return false;
        }
        return true;
};
$
$ slimit < test.js
var a=function(obj){for(var name in obj){return false;}return true;};

Or using library API:

>>> from slimit import minify
>>> text = """
... var a = function( obj ) {
...         for ( var name in obj ) {
...                 return false;
...         }
...         return true;
... };
... """
>>> print minify(text)
var a=function(obj){for(var name in obj){return false;}return true;};

Iterate over, modify a JavaScript AST and pretty print it

>>> from slimit.parser import Parser
>>> from slimit.visitors import nodevisitor
>>> from slimit import ast
>>>
>>> parser = Parser()
>>> tree = parser.parse('for(var i=0; i<10; i++) {var x=5+i;}')
>>> for node in nodevisitor.visit(tree):
...     if isinstance(node, ast.Identifier) and node.value == 'i':
...         node.value = 'hello'
...
>>> print tree.to_ecma() # print awesome javascript :)
for (var hello = 0; hello < 10; hello++) {
  var x = 5 + hello;
}
>>>

N.B. First time you invoke parse method it will generate the lextab.py and yacctab.py LALR tables in current directory and you may see some warnings - that’s OK. Previously generated tables are cached and reused if possible. For more details visit PLY’s official site.

Using lexer in your project

>>> from slimit.lexer import Lexer
>>> lexer = Lexer()
>>> lexer.input('a = 1;')
>>> for token in lexer:
...     print token
...
LexToken(ID,'a',1,0)
LexToken(EQ,'=',1,2)
LexToken(NUMBER,'1',1,4)
LexToken(SEMI,';',1,5)

You can get one token at a time using token method:

>>> lexer.input('a = 1;')
>>> while True:
...     token = lexer.token()
...     if not token:
...         break
...     print token
...
LexToken(ID,'a',1,0)
LexToken(EQ,'=',1,2)
LexToken(NUMBER,'1',1,4)
LexToken(SEMI,';',1,5)

LexToken instance has different attributes:

>>> lexer.input('a = 1;')
>>> token = lexer.token()
>>> token.type, token.value, token.lineno, token.lexpos
('ID', 'a', 1, 0)

Installation

Using pip:

$ sudo pip install slimit

Using easy_install:

$ sudo easy_install slimit

Roadmap

  • More minifications

Change History

0.3.2 (2011-05-09)

  • More hacks to use pre-generated lex and yacc tables when called from the command line

0.3.1 (2011-05-09)

  • Use pre-generated lex and yacc tables when called from the command line

0.3 (2011-05-09)

  • Added minifier

0.2 (2011-05-07)

  • Added a JavaScript parser

  • Added pretty printer

  • Added node visitor

0.1 (2011-05-02)

  • Initial public version. It contains only a JavaScript lexer

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

slimit-0.3.2.tar.gz (49.6 kB view details)

Uploaded Source

File details

Details for the file slimit-0.3.2.tar.gz.

File metadata

  • Download URL: slimit-0.3.2.tar.gz
  • Upload date:
  • Size: 49.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for slimit-0.3.2.tar.gz
Algorithm Hash digest
SHA256 85617382828db5f14d3ad9b2418501e4d3c7b9fb6a52eca6a599b2ec43d5ae5e
MD5 09df40db88a8771bdcbaf53546032fe8
BLAKE2b-256 06765883de8f3bdc53346056b4862aad1dc1efb716742c60c24816bc476f3b84

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page