2012-02-19 1 views
6

나는 Hostgator에서 공유 호스팅 계획을 사용하고 있습니다. 따라서 나는 커맨드 라인에서 어떤 자바도 실행할 수 없다.PHP javascript minifier

거기에 내가 사용할 수있는 순수한 PHP minifier가 있습니까? Minify은 백그라운드에서 YUICompressor.jar을 사용하므로 작동하지 않습니다.

누구나 PHP를 사용하여 명령 줄에서 실행할 수있는 자바 스크립트를 축소하는 방법을 알고 있습니까? 변수 이름을 줄이기를 원합니다.

+6

당신이 다른 곳을 befor 축소에 고려 되세요 (/*! 의견을 보존하지 않습니다 조건부 의견을 미치게) e 서버에 업로드 하시겠습니까? – jergason

+0

아마도 가장 쉬운 방법은 웹용 서비스를 cURL 또는 이와 유사한 것으로 사용하는 것입니다. – Vitamin

+0

@ Jergason : 내 프로젝트에 자식을 사용하고 있기 때문에 불가능합니다. – qwertymk

답변

3

Google js 미니 리 저를 사용할 수 있습니다. 여기에 자바 스크립트 파일들을 압축하는 데 사용하는 파이썬 스크립트는 다음과 같습니다

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) 

사용법 : 당신이 고대의 파이썬 버전을 사용하고 설치된 simplejson이없는 경우


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

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

내 웹 사이트에서 제작 한 것입니다. 방금 주변에 몇 가지 물건을 제거하고 독립 실행 형'__main__' 블록을 추가했습니다. 나는 그 버전을 테스트하지 않았지만 원래의 스크립트. – ThiefMaster

+0

아, 구문 오류가 해결되었습니다. 그 자리에 속하지 않은 것은 단지 ','이었습니다. 당신이 얻는 오류는 당신이 오래된 파이썬 버전을 사용하고 있다는 것을 의미합니다. – ThiefMaster

0

온라인 웹 기반 JS 미니 화자를 찾고 PHP를 통해 <form>에 cURL 또는 file_get_contents 또는 그 유사 물을 쿼리하십시오. 이런 식으로 서비스를 사용하기 전에 온라인 서비스에 허가를 요청해야 할 수도 있습니다.

1

다른 자바 스크립트를 사용해 minifier/압축기를 고려하는 경우, 학장 에드워드의 포장의 PHP 포트를 살펴 : http://joliclic.free.fr/php/javascript-packer/en/ 설치하기 전에

당신이 온라인으로 테스트 할 수 있도록 사용할 수있는 온라인 데모가 (추천 그것 자신의 서버에). 나는 빠른 온라인 테스트를 통해 나에게 올바른 작업 축소 된 자바 스크립트 파일을 보냈다. 작업이 완료되어야합니다.

1

스크립트의 축소의 기본이 YUIC 아니라 : 시스템이 여기에 스크립트가 로컬 simplejson 버전 (SSH를 통해 해당 명령을 실행)와 함께 작동하도록 얻을 수있는 방법 네이티브 PHP port of JSMin 플러스 버그 수정.

다른 네이티브 PHP 자바 스크립트 압축기 나는 건너했습니다

  • JSqueeze (테스트되지 않은,하지만 강력한 모양)
  • (JSMin을 같이 검증되지 않은,하지만 간단한 토큰 제거 디자인)
  • JShrinkJSMin+