2012-02-19 9 views
6

Używam udostępnionego planu hostingowego na Hostgator. W związku z tym nie mogę uruchomić żadnego java z wiersza poleceń.php javascript minifier

Czy są tam jakieś minifiery PHP, których mogę użyć? Minify używa YUICompressor.jar w tle, więc nie będzie działać.

Ktoś wie o czymś, co używa po prostu PHP, aby zminimalizować javascript, który mogę uruchomić z wiersza poleceń? Chciałbym także, aby zmniejszyć nazwy zmiennych.

+6

Czy rozważałeś minifying gdzieś indziej e ładowanie na twój serwer? – jergason

+0

Być może najłatwiej byłoby użyć usługi sieciowej do tego przy użyciu cURL lub podobnego – Vitamin

+0

@Jergason: Nie możliwe, ponieważ używam git dla mojego projektu. – qwertymk

Odpowiedz

3

Można użyć minigatora google js. Oto skrypt Pythona, który używa go skompresować kilka plików JavaScript z nim:

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) 

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


W przypadku korzystania starożytną wersję Pythona i nie mają simplejson zainstalowany na system, oto jak można uzyskać skrypt do pracy z wersji lokalnej simplejson (uruchom te polecenia poprzez SSH):

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

Czy to testowałeś? – qwertymk

+0

Pochodzi z jednej z moich stron, które są uruchomione w produkcji. Właśnie usunąłem trochę rzeczy i dodałem samodzielny blok "__main__". Nie testowałem * tej * wersji, ale oryginalnego skryptu. – ThiefMaster

+0

Ah, właśnie naprawiłem błąd składni. To było po prostu "," które nie należało do tego miejsca. Otrzymany błąd oznacza, że ​​używasz starej wersji pythona. Potrzebujesz go co najmniej 2,6, aby go uruchomić (co jest już dość stare, 2.7 jest najnowsze!) – ThiefMaster

0

Znajdź internetowy mininisekator JS i zapytaj o jego numer <form> poprzez PHP za pomocą cURL lub file_get_contents lub podobnego. Przypuszczam, że zanim skorzystasz z usługi w ten sposób, będziesz musiał poprosić usługę online o pozwolenie.

1

Jeśli rozważyć inne javascript minifiers/kompresory, spojrzeć na port PHP Dean Edward pakującego: http://joliclic.free.fr/php/javascript-packer/en/

Jest demo on-line dostępne, dzięki czemu można przetestować go w Internecie (wysoce zalecane, zanim spróbujesz zainstalować to na własnym serwerze). Szybki test online dał mi poprawny, działający, skasowany plik javascript. To powinno załatwić zadanie.

1

domyślny minify nie jest YUIC, ale natywny PHP port of JSMin plus poprawki błędów.

Inne rodzime sprężarki PHP Javascript Natknąłem:

  • JSqueeze (niesprawdzone, ale wygląda na mocny)
  • JShrink (niesprawdzone, ale prostą konstrukcję token-usuwania, jak JSMin)
  • JSMin+ (nie zachowuje komentarzy warunkowych /*!, komentarze warunkowe mangles)