django-compressor创建带有语法错误的javascript

时间:2012-12-17 09:20:02

标签: django django-compressor jsmin

一些背景...我正在设置我的新网站的基本模板,我包括一些流行的JavaScript库,例如AngularJS,Bootstrap的javascript文件和Underscore.js。当然,我将这些文件包装在{%compress js%}中。示例代码如下:

{% compress js %}
    <script src="{{ STATIC_URL }}new_js/vendor/modernizr-2.6.2-respond-1.1.0.min.js"></script>
    <script>window.jQuery || document.write('<script src="{{ STATIC_URL }}new_js/vendor/jquery-1.8.3.min.js"><\/script>');</script>
    <script src="{{ STATIC_URL }}new_js/vendor/bootstrap.js"></script>

    <!-- Angular -->
    <script src="{{ STATIC_URL }}new_js/vendor/angular.min.js"></script>
    <script src="{{ STATIC_URL }}new_js/angular/directives.js"></script>
    <script src="{{ STATIC_URL }}new_js/angular/services.js"></script>
    <script src="{{ STATIC_URL }}new_js/vendor/underscore-1.4.3.min.js"></script>

    {% block extra_js %}{% endblock %}
{% endcompress %}

我知道django-compressor只运行缩小过滤器,所以可能是minifiers没有生成正确的Javascript输出。

这是我用JSMin得到的JS错误:

SyntaxError: invalid increment operand
http://localhost:8000/site_media/static/cache/js/0f5eb5fb3b24.js
Line 448

SlimIt生成的文件中的错误:

SyntaxError: missing ; after for-loop initializer
http://localhost:8000/site_media/static/cache/js/7fbdf61f5abb.js
Line 1

我不完全确定这里发生了什么,似乎很难相信minifiers会在这些常见的js库上生成不正确的文件。

有没有人遇到django-compressor的Javascript过滤器搞乱公共库的问题?

1 个答案:

答案 0 :(得分:1)

我上了IRC,有人给了我一个很好的建议。他们告诉我使用非缩小版的Javascript文件。这样,您就可以在开发环境中进行调试。这解决了我的大多数问题。

最新版本的Underscore.js 1.4.3仍然存在问题,但它已在其开发分支中修复。

https://github.com/jonthornton/jquery-timepicker也存在问题。所以我现在把它放在{%nocompress js%}中。