2012-02-19 47 views
6

我在Hostgator上使用共享託管計劃。因此,我不能從命令行運行任何Java。php javascript minifier

有沒有純PHP minifiers在那裏,我可以使用? Minify在後臺使用YUICompressor.jar,以至於無法正常工作。

任何人都知道,它使用PHP只是用於縮小,我可以在命令行中運行JavaScript的東西嗎?我也想要縮小變量名稱。

+6

你有沒有考慮縮小別的地方呢?上傳到你的服務器? – jergason 2012-02-19 17:29:13

+0

也許最簡單的方法是使用網絡服務爲此使用cURL或類似 – Vitamin 2012-02-19 17:29:46

+0

@Jergason:不可能,因爲我爲我的項目使用git。 – qwertymk 2012-02-19 17:33:57

回答

3

你可以使用谷歌的JS minifier。下面是它使用它來壓縮一堆的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 filename.py path/to/your/*.js > minified.js


如果您使用的是古老的Python版本不具有simplejson安裝在你的系統,這裏是你如何能拿到劇本與本地simplejson版本(通過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

你測試過了嗎? – qwertymk 2012-02-19 17:55:47

+0

這是從我的一個網站上運行生產。我只是刪除了一些東西,並添加了獨立的'__main__'塊。我沒有測試*版本,但是原始腳本。 – ThiefMaster 2012-02-19 17:56:56

+0

啊,只是修正了語法錯誤。這只是一個'',它不屬於它的地方。您收到的錯誤意味着您正在使用舊的Python版本。你至少需要2.6來運行它(這已經很老了,最近2.7!) – ThiefMaster 2012-02-19 17:58:42

0

查找基於JS minifier在線網絡,並查詢其<form>通過PHP與捲曲或file_get_contents或相似。我想你可能不得不在線使用他們的服務前請求在線服務權限。

1

如果考慮其他JavaScript minifiers /壓縮機,看看院長愛德華的封隔器的PHP接口:http://joliclic.free.fr/php/javascript-packer/en/

有一個可用,所以你可以在網上測試它的在線演示(強烈建議你嘗試安裝之前它在你自己的服務器上)。我快速在線測試給了我一個正確的工作縮小的JavaScript文件。 它應該完成工作。

1

縮減大小的默認是不YUIC,但原生PHP port of JSMin加上錯誤修正。

其他本地PHP的Javascript壓縮機我遇到:

  • JSqueeze(未經測試,但看起來強大)
  • JShrink(未經測試,但一個簡單的令牌卸妝設計,像JSMin)
  • JSMin+(不保留/*!評論,損壞有條件的評論)
相關問題