javascript - 在 python 中部署时合并 javascript 文件

标签 javascript python deployment buildout jscompress

我正在尝试减少我们网站中包含的脚本数量,并且我们使用 buildout 来处理部署。有没有人成功实现过用buildout组合压缩脚本的方法?

最佳答案

这是我制作的一个 Python 脚本,我将它用于我所有繁重的 JavaScript 项目。我正在使用 YUICompressor,但您可以更改代码以使用其他压缩器。

import os, os.path, shutil

YUI_COMPRESSOR = 'yuicompressor-2.4.2.jar'

def compress(in_files, out_file, in_type='js', verbose=False,
             temp_file='.temp'):
    temp = open(temp_file, 'w')
    for f in in_files:
        fh = open(f)
        data = fh.read() + '\n'
        fh.close()

        temp.write(data)

        print ' + %s' % f
    temp.close()

    options = ['-o "%s"' % out_file,
               '--type %s' % in_type]

    if verbose:
        options.append('-v')

    os.system('java -jar "%s" %s "%s"' % (YUI_COMPRESSOR,
                                          ' '.join(options),
                                          temp_file))

    org_size = os.path.getsize(temp_file)
    new_size = os.path.getsize(out_file)

    print '=> %s' % out_file
    print 'Original: %.2f kB' % (org_size / 1024.0)
    print 'Compressed: %.2f kB' % (new_size / 1024.0)
    print 'Reduction: %.1f%%' % (float(org_size - new_size) / org_size * 100)
    print ''

    #os.remove(temp_file)

我是这样使用的(下面只是一个代码片段,并假设当前命名空间中存在compress函数):

SCRIPTS = [
    'app/js/libs/EventSource.js',
    'app/js/libs/Hash.js',
    'app/js/libs/JSON.js',
    'app/js/libs/ServiceClient.js',
    'app/js/libs/jquery.hash.js',
    'app/js/libs/Application.js',
    'app/js/intro.js',
    'app/js/jquery-extras.js',
    'app/js/settings.js',
    'app/js/api.js',
    'app/js/game.js',
    'app/js/user.js',
    'app/js/pages.intro.js',
    'app/js/pages.home.js',
    'app/js/pages.log-in.js',
    'app/js/pages.log-out.js',
    'app/js/pages.new-command.js',
    'app/js/pages.new-frame.js',
    'app/js/pages.not-found.js',
    'app/js/pages.register.js',
    'app/js/pages.outro.js',
    'app/js/outro.js',
    ]
SCRIPTS_OUT_DEBUG = 'app/js/multifarce.js'
SCRIPTS_OUT = 'app/js/multifarce.min.js'

STYLESHEETS = [
    'app/media/style.css',
    ]
STYLESHEETS_OUT = 'app/media/style.min.css'

def main():
    print 'Compressing JavaScript...'
    compress(SCRIPTS, SCRIPTS_OUT, 'js', False, SCRIPTS_OUT_DEBUG)

    print 'Compressing CSS...'
    compress(STYLESHEETS, STYLESHEETS_OUT, 'css')

if __name__ == '__main__':
    main()

关于javascript - 在 python 中部署时合并 javascript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1199470/

相关文章:

google-app-engine - 您如何在 App Engine (GCP) 上部署 Streamlit 应用程序?

javascript - 动态改变onclick方法

python - 从 dataproc 中运行的 pyspark 作业将 python 数据对象保存到 Google 存储中的文件

python - pytest - 使用另一个插件的插件

python - 使用 StandardScaler 使用特定功能缩放具有不同形状的数组

ruby-on-rails - Heroku 返回 404 但日志上没有错误

javascript - 如何检查一个对象是否是一个 Vue 组件?

javascript - 使用 jQuery 将 100% 高度分配给 div

javascript - HTML 计数器从 15 分钟开始一直持续到按下按钮为止?

MATLAB:安全共享函数