2012-02-19 9 views
6

私はHostgatorで共有ホスティングプランを使用しています。したがって、私はコマンドラインからjavaを実行することはできません。php javascript minifier

私が使用できる純粋なPHP minifierはありますか? MinifyはバックグラウンドでYUICompressor.jarを使用するため、動作しません。

PHPを使用してコマンドラインから実行できるjavascriptを使用している人は誰でも知っていますか?私は変数名を縮小することも望みます。

+6

あなたのサーバーにアップロードしますか? – jergason

+0

おそらく、最も簡単な方法は、cURLなどを使ってWebサービスを使用することです。 – Vitamin

+0

@ Jergason:自分のプロジェクトにgitを使用しているので不可能です。 – qwertymk

答えて

3

Google jsミニカーを使用できます。ここではそれとJavaScriptファイルの束を圧縮するためにそれを使用してPythonのスクリプトは次のとおりです。

import httplib 
import simplejson as json 
import urllib 
import sys 

def combine_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), 
      ('compilation_level', 'SIMPLE_OPTIMIZATIONS'), 
      ('output_format', 'json'), 
      ('output_info', 'compiled_code'), 
      ('output_info', 'errors'), 
      ('output_info', 'warnings'), 
     ]) 

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

    # 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 combine_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 combine_js(js_files) 
     chunks.append(res) 
    return '\n\n'.join(chunks).strip() 

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

使用法:あなたは古代のPythonのバージョンを使用していて、上のインストールのsimplejsonれていない場合は


python filename.py path/to/your/*.js > minified.jsお使いのシステムは、ここ(SSH経由でこれらのコマンドを実行します)スクリプトがローカルのsimplejsonのバージョンで動作するように取得することができます方法は次のとおりです。

cd 
wget http://pypi.python.org/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/ 
+0

これはテストしましたか? – qwertymk

+0

それは私のウェブサイトの1つで、プロダクションで稼働しています。私はちょうどその周りのいくつかのものを削除し、スタンドアロンの__main__ブロックを追加しました。私はそのバージョンをテストしませんでしたが、元のスクリプトです。 – ThiefMaster

+0

ああ、ちょうど構文エラーを修正しました。その場所に属していないのはちょうど '、'だった。あなたが得るエラーはあなたが古いpythonバージョンを使用していることを意味します。 – ThiefMaster

0

オンラインWebベースのJSミニファイアを見つけて、cURLまたはfile_get_contentsなどでPHPを通じて<form>に問い合わせます。この方法でサービスを利用する前にオンラインサービスに許可を求める必要があるかもしれないと思います。

1

あなたは他のJavaScript minifiers /コンプレッサーを考慮すれば、ディーンエドワードのパッカーのPHPポートを見てみましょう:http://joliclic.free.fr/php/javascript-packer/en/をインストールしようとする前に、

あなたがオンラインでそれをテストすることができますので、オンラインで利用可能なデモがあります(強くお勧めしますそれはあなた自身のサーバー上にあります)。私は迅速なオンラインテストは私に戻って正しい作業minified javascriptファイルを与えた。 それは仕事を完了する必要があります。

1

縮小化のデフォルトはYUICではありませんが、ネイティブのPHP port of JSMinとバグの修正。

私が遭遇してきた他のネイティブPHP Javascriptのコンプレッサー:

  • JSqueeze(未テストが、強力に見える)
  • JShrink(未テストが、JSMinのような単純なトークンリムーバーデザイン、) JSMin+/*!コメントは残しておらず、条件付きコメントをマングルする)
関連する問題