最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

php javascript minifier - Stack Overflow

programmeradmin0浏览0评论

I'm using a shared hosting plan on Hostgator. As such I can't run any java from the mand line.

Is there any pure PHP minifiers out there that I can use? Minify uses YUICompressor.jar in the background so that won't work.

Anyone know of something that uses just PHP to minify javascript that I can run from the mand line? I would also like it to shrink variable names.

I'm using a shared hosting plan on Hostgator. As such I can't run any java from the mand line.

Is there any pure PHP minifiers out there that I can use? Minify uses YUICompressor.jar in the background so that won't work.

Anyone know of something that uses just PHP to minify javascript that I can run from the mand line? I would also like it to shrink variable names.

Share Improve this question edited Feb 19, 2012 at 17:49 qwertymk asked Feb 19, 2012 at 17:25 qwertymkqwertymk 35.4k30 gold badges124 silver badges184 bronze badges 11
  • 6 Have you considered minifying somewhere else before uploading to your server? – Jamison Dance Commented Feb 19, 2012 at 17:29
  • Perhaps the easiest way would be to use a web service for this using cURL or similar – Vitamin Commented Feb 19, 2012 at 17:29
  • @Jergason: Not possible as I'm using git for my project. – qwertymk Commented Feb 19, 2012 at 17:33
  • @Vague: Can you explain what you mean? – qwertymk Commented Feb 19, 2012 at 17:35
  • code.google./p/jshrink- – Vamsi Krishna B Commented Feb 19, 2012 at 17:43
 |  Show 6 more ments

4 Answers 4

Reset to default 3

You could use the google js minifier. Here's a python script which uses it to press a bunch of javascript files with it:

import httplib
import simplejson as json
import urllib
import sys

def bine_js(js_files, minify=False):
    files = list(js_files) # create a copy which we can modify
    if not minify:
        code = []
        for path in files:
            f = open(path, 'r')
            code.append(f.read())
            f.close()
        return '\n\n'.join(code)

    def _minify(code):
        params = urllib.urlencode([
            ('js_code', code),
            ('pilation_level', 'SIMPLE_OPTIMIZATIONS'),
            ('output_format', 'json'),
            ('output_info', 'piled_code'),
            ('output_info', 'errors'),
            ('output_info', 'warnings'),
        ])

        headers = {'Content-type': "application/x-www-form-urlencoded"}
        conn = httplib.HTTPConnection('closure-piler.appspot.')
        conn.request('POST', '/pile', params, headers)
        response = conn.getresponse()
        data = json.loads(response.read())
        conn.close()
        if not data.get('piledCode'):
            print >>sys.stderr, 'WARNING: Did not get any code from google js piler.'
            print >>sys.stderr, data
            print >>sys.stderr
            print >>sys.stderr, 'Using unminified code'
            return None
        return data.get('piledCode')

    # Minify code in chunks to avoid the size limit
    chunks = []
    code = ''
    while len(files):
        path = files[0]
        f = open(path, 'r')
        data = f.read()
        f.close()
        # Check if we reach the size limit
        if len(code + data) >= 1000000:
            res = _minify(code)
            if res is None:
                # Fallback to unminified code
                return bine_js(js_files)
            chunks.append(res)
            code = ''
            continue
        code += data
        del files[0]
    if code:
        res = _minify(code)
        if res is None:
            # Fallback to unminified code
            return bine_js(js_files)
        chunks.append(res)
    return '\n\n'.join(chunks).strip()

if __name__ == '__main__':
    print bine_js(sys.argv[1:], True)

Usage: python filename.py path/to/your/*.js > minified.js


In case you are using an ancient python version and do not have simplejson installed on your system, here's how you can get the script to work with a local simplejson version (run those mands via SSH):

cd
wget http://pypi.python/packages/source/s/simplejson/simplejson-2.3.2.tar.gz
tar xzf simplejson-2.3.2.tar.gz
export PYTHONPATH=$HOME/simplejson-2.3.2/

If you consider other javascript minifiers/pressors, take a look at a PHP port of dean edward's packer: http://joliclic.free.fr/php/javascript-packer/en/

There is an online demo available so you can test it online (highly remended before you try to install it on your own server). I quick online test gave me back a correct working minified javascript file. It should get the job done.

Minify's default is not YUIC, but a native PHP port of JSMin plus bug fixes.

Other native PHP Javascript pressors I've e across:

  • JSqueeze (untested, but looks powerful)
  • JShrink (untested, but a simple token-remover design, like JSMin)
  • JSMin+ (does not preserve /*! ments, mangles conditional ments)

Find an online web based JS minifier, and query their <form> through PHP with cURL or file_get_contents or similar. I suppose you may have to ask the online service for permission before using their service in this way.

发布评论

评论列表(0)

  1. 暂无评论