【问题标题】:django-pipeline: Why do these JS lines cause yui-compressor to crash?django-pipeline:为什么这些 JS 行会导致 yui-compressor 崩溃?
【发布时间】:2016-07-13 16:25:50
【问题描述】:

我有一个 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 时,我得到了“破管”异常。我很快意识到 yui-compressor 由于 JS 的问题而崩溃。所以我开始隔离导致 yui-compressor 崩溃的文件和代码行。

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

    $('#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,并且确实正确设置了这些按钮的类。

【问题讨论】:

    标签: javascript django yui-compressor django-pipeline


    【解决方案1】:

    这可能与 yui-compressor ES6 类关键字处理有关。尝试用引号将 class 键括起来:

    改变这个:

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

    到:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 2014-10-05
      相关资源
      最近更新 更多