django-pipeline:为什么这些JS线会导致yui-compressor崩溃?

时间:2016-07-13 16:25:50

标签: javascript django yui-compressor django-pipeline

我有一个Django应用程序,在应用程序中我正在尝试捆绑和缩小所有Javascript文件和CSS文件。

为此,我正在使用django-pipeline 1.2.6,并且我已经配置了我的设置文件,使得它使用默认的YUICompressor来压缩JS和CSS文件。我的设置文件配置如下:

...

# PIPELINE SETTINGS (for compressing/bundling css and js files)
STATICFILES_STORAGE = "pipeline.storage.PipelineCachedStorage"

PIPELINE_YUI_BINARY = "/usr/bin/yui-compressor"

PIPELINE_JS = {
    'min': {
        'source_filenames': (              
            "js/*.js",
        ),
        'output_filename': 'js/min.js'
    }
}

PIPELINE_CSS = {
    ...
}

PIPELINE = True

当我运行命令python src/foo_app/manage.py collectstatic时,我得到了“破管”异常。我很快意识到由于JS的问题,yui-compressor崩溃了。所以我开始隔离导致yui-compressor崩溃的文件和代码行。

我最终将它缩小为两行,定义了jquery弹出窗口上按钮的class属性:

    $('#some-modal').dialog({
        ...
        buttons: [
            {
                text  : 'Print',
                click : function() {
                    ...
                },
                class : 'foo-class bar-class' // <- this line
            },
            {
                text  : 'Close',
                click : function() {
                    ...
                },
                class : 'foo-class bar-class' // <- this line
            }
        ],
    });

当我删除这些类定义时,yui-compressor压缩我的JS就好了。但是,如果包含这些行,yui-compressor会崩溃。

为什么这些线会导致压缩机崩溃?这是有效的Javascript,这确实正确设置了这些按钮的类。

1 个答案:

答案 0 :(得分:1)

也许这与yui-compressor ES6类关键字处理有关。尝试在引号中包含class键:

改变这个:

class : 'foo-class bar-class' // <- this line

为:

'class' : 'foo-class bar-class' // <- this line