2012-02-19 16 views
6

Tôi đang sử dụng gói lưu trữ được chia sẻ trên Hostgator. Như vậy tôi không thể chạy bất kỳ java từ dòng lệnh.php javascript minifier

Có bộ khai thác PHP tinh khiết nào ở ngoài mà tôi có thể sử dụng không? Minify sử dụng YUICompressor.jar trong nền để không hoạt động.

Bất kỳ ai cũng biết điều gì đó chỉ sử dụng PHP để rút gọn javascript mà tôi có thể chạy từ dòng lệnh? Tôi cũng muốn nó thu nhỏ tên biến.

+6

Bạn đã cân nhắc việc rút gọn một nơi khác e tải lên máy chủ của bạn? – jergason

+0

Có lẽ cách dễ nhất là sử dụng dịch vụ web cho việc này bằng cách sử dụng cURL hoặc tương tự – Vitamin

+0

@Jergason: Không thể sử dụng git cho dự án của tôi. – qwertymk

Trả lời

3

Bạn có thể sử dụng trình chỉnh sửa google js. Dưới đây là một kịch bản python trong đó sử dụng nó để nén một loạt các file javascript với nó:

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) 

Cách sử dụng: python filename.py path/to/your/*.js > minified.js


Trong trường hợp bạn đang sử dụng một phiên bản python cổ và không có simplejson cài đặt trên hệ thống của bạn, dưới đây là cách bạn có thể làm cho tập lệnh hoạt động với phiên bản simplejson cục bộ (chạy các lệnh đó qua 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

Bạn đã thử nghiệm điều này chưa? – qwertymk

+0

Đó là từ một trong những trang web của tôi chạy trong sản xuất. Tôi chỉ cần loại bỏ một số thứ xung quanh nó và thêm khối độc lập '__main__'. Tôi đã không thử nghiệm * rằng * phiên bản nhưng kịch bản gốc. – ThiefMaster

+0

Ah, vừa sửa lỗi cú pháp. Nó chỉ là một ', 'không thuộc về vị trí của nó. Lỗi bạn nhận được có nghĩa là bạn đang sử dụng phiên bản python cũ. Bạn cần ít nhất 2.6 để chạy nó (đã khá cũ, 2.7 là gần đây!) – ThiefMaster

0

Tìm một trình chỉnh sửa JS dựa trên web trực tuyến và truy vấn <form> thông qua PHP với cURL hoặc file_get_contents hoặc tương tự. Tôi cho rằng bạn có thể phải yêu cầu dịch vụ trực tuyến cho phép trước khi sử dụng dịch vụ của họ theo cách này.

1

Nếu bạn xem xét minifiers javascript/nén khác, hãy nhìn vào một cổng PHP của người đóng gói dean edward của: http://joliclic.free.fr/php/javascript-packer/en/

Có một bản demo trực tuyến có sẵn để bạn có thể kiểm tra nó trực tuyến (rất khuyến khích trước khi bạn cố gắng để cài đặt nó trên máy chủ của riêng bạn). Tôi nhanh chóng kiểm tra trực tuyến đã cho tôi trở lại một tập tin javascript làm việc chính xác minified. Nó sẽ hoàn thành công việc.

1

Mặc định làm mờ không phải là YUIC, nhưng bản sửa lỗi gốc PHP port of JSMin.

nén PHP Javascript có nguồn gốc khác tôi đã đi qua:

  • JSqueeze (chưa được kiểm tra, nhưng trông mạnh mẽ)
  • JShrink (chưa được kiểm tra, nhưng một thiết kế token-loại bỏ đơn giản, giống như JSMin)
  • JSMin+ (không lưu giữ /*! nhận xét, mangles bình luận có điều kiện)