【问题标题】:Django + Django-Pipeline with Javascript "Require"带有Javascript“要求”的Django + Django-Pipeline
【发布时间】:2014-07-01 00:45:13
【问题描述】:

我有一个在 Javascript 库上调用 require 的模块。我正在尝试使用 Django-Pipeline 压缩我的 .js 文件,但在 collectstatic 之后,网页出现错误:

UncaughtReferenceError: require is not Defined

如果我不使用 Django-Pipeline 压缩文件,则正常测试/部署与 collect-static 配合得很好。在不破坏依赖关系的情况下缩小我的 .js 文件的正确设置是什么 - 文档有点稀疏。 django-pipeline 是正确的选择吗?

编辑:我试图确保首先在管道中压缩“必需”模型,但我似乎无法压缩调用 require 的模块而不返回错误。

【问题讨论】:

    标签: javascript python django django-pipeline


    【解决方案1】:

    根据我的经验,很难将 require.js 和 django-pipeline 结合起来(尽管它们都是很棒的项目)。

    我参与过一个项目,该项目的所有 javascript 都使用了 require.js。我尝试使用 django-pipeline 但无法使其与 require.js 一起正常工作。我们最终使用 https://github.com/etianen/django-require 处理 javascript,使用 django-pipeline 处理 css 缩小。

    我建议尝试删除 require.js 并手动包含它使用管道导入的库,或者使用 require.js 构建和缩小所有 JavaScript 资产。您可以添加一个新步骤来构建所有 javascript 文件,并直接在模板中或使用管道链接到这些文件。

    抱歉,这可能不是您回答的实际“解决方案”,但您确实问过“django-pipeline 是正确的选择吗?” :)

    【讨论】:

    • 同意。用 django-pipeline 处理 CSS 很棒,但就 JS 而言,我们绝对可以使用更灵活的解决方案,例如 django-require。
    【解决方案2】:

    这是因为您的 JS 压缩器(例如 YUGLIFY)也在缩小 javascript 变量名称,因此 require 可能已命名为 xy 之类的名称。 为了克服这个在你的 JS 压缩器中设置正确的选项,不要缩小变量名。

    http://django-pipeline.readthedocs.org/en/latest/compressors.html#pipeline-yui-js-arguments

    对于 Yuglify,此参数将是 mangle:False,这将停止破坏名称。

    【讨论】:

    • +1。您是正确的,设置 mange:false 将修复 require 中断 - 但最终仍会缩小整个库(在这种情况下为 350kb),这是一种减号。所以我想我得试试django-require
    【解决方案3】:

    也许是PIPELINE_DISABLE_WRAPPER。尝试将其设置为True

    https://django-pipeline.readthedocs.org/en/latest/configuration.html#wrapped-javascript-output

    【讨论】:

    • 我确实有 PIPELINE_DISABLE_WRAPPER - 是的
    • 我猜 Django-Pipeline 无法正确处理需求?除非有人对此有更新。
    猜你喜欢
    • 1970-01-01
    • 2014-12-31
    • 2018-04-06
    • 2020-08-17
    • 2015-10-19
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    相关资源
    最近更新 更多