【问题标题】:php javascript minifierphp javascript缩小器
【发布时间】:2012-02-19 17:25:14
【问题描述】:

我在 Hostgator 上使用共享托管计划。因此,我无法从命令行运行任何 java。

有没有我可以使用的纯 PHP 缩小器? Minify 在后台使用 YUICompressor.jar,因此无法正常工作。

有人知道只使用 PHP 来缩小我可以从命令行运行的 javascript 的东西吗?我也希望它缩小变量名。

【问题讨论】:

  • 在上传到服务器之前,您是否考虑过缩小其他地方?
  • 也许最简单的方法是使用 cURL 或类似方法的 Web 服务
  • @Jergason:不可能,因为我正在为我的项目使用 git。
  • @Vague:你能解释一下你的意思吗?

标签: php javascript


【解决方案1】:

您可以使用 google js 缩小器。这是一个 python 脚本,它使用它来压缩一堆 javascript 文件:

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/

【讨论】:

  • 它来自我在生产中运行的网站之一。我刚刚删除了它周围的一些东西并添加了独立的__main__ 块。我没有测试 那个 版本,而是原始脚本。
  • 啊,刚刚修复了语法错误。它只是一个不属于它的,。您收到的错误意味着您使用的是旧的 python 版本。您至少需要 2.6 才能运行它(这已经很老了,2.7 是最近的!)
  • 我仍然收到此错误,文件“python.py”,第 11 行,open(path, 'r') as f: ^ SyntaxError: invalid syntax。有什么解决方法吗?
  • 一次只运行一个文件会有帮助吗?
  • 没有。我只是将其更改为不使用with;它现在可能适用于较旧的 python 版本。
【解决方案2】:

如果您考虑使用其他 javascript 压缩器/压缩器,请查看 Dean edward 打包器的 PHP 端口:http://joliclic.free.fr/php/javascript-packer/en/

有一个在线演示可供您在线测试(强烈建议您在尝试将其安装到自己的服务器上之前)。我的快速在线测试给了我一个正确工作的缩小 javascript 文件。 它应该可以完成工作。

【讨论】:

    【解决方案3】:

    Minify 的默认值不是 YUIC,而是原生的 PHP port of JSMin 加上错误修复。

    我遇到的其他原生 PHP Javascript 压缩器:

    • JSqueeze(未经测试,但看起来很强大)
    • JShrink(未经测试,但是一个简单的令牌移除器设计,如 JSMin)
    • JSMin+(不保留 /*! cmets,破坏条件 cmets)

    【讨论】:

      【解决方案4】:

      找到一个基于 Web 的在线 JS 缩小器,并通过 PHP 使用 cURL 或 file_get_contents 或类似方法查询他们的 <form>。我想您在以这种方式使用他们的服务之前可能需要征求在线服务的许可。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-22
        相关资源
        最近更新 更多