我有一个在Javascript库上调用require
的模块。我正试图用Django-Pipeline压缩我的。js文件,但在collectstatic
之后,网页给出了错误:
UncaughtReferenceError: require is not Defined
如果我不使用Django-Pipeline来压缩文件,collect-static可以正常测试/部署。在不破坏依赖关系的情况下最小化.js文件的正确设置是什么?文档有点稀疏。django-pipeline是正确的选择吗?
编辑:我试图确保"所需"模型首先在管道中压缩,但我似乎无法压缩require
被调用的模块,而不返回错误。
根据我的经验,很难将require.js和django-pipeline结合起来(尽管它们都是很棒的项目)。
我曾在一个项目中使用require.js的所有javascript。我试图使用django-pipeline,但无法让它与require.js正常工作。我们最终用https://github.com/etianen/django-require来处理javascript,用django-pipeline来处理css。
我建议尝试删除require.js并手动包含它正在使用管道导入的库,或者使用require.js来构建和最小化所有javascript资产。你可以添加一个新的步骤来构建所有的javascript文件,并直接链接到模板中或使用管道。
对不起,这可能不是你答案的实际"解决方案",但你确实问了"django-pipeline是正确的选择吗?":)
这是因为你的JS压缩器(例如YUGLIFY)也在缩小javascript变量名,所以require
可能已经被命名为x
或y
。为了克服这个问题,在JS压缩器中设置适当的选项,而不是缩小变量名。
http://django-pipeline.readthedocs.org/en/latest/compressors.html pipeline-yui-js-arguments
对于Yuglify,该参数将是mangle:False
,它将停止混淆名称。
可能是PIPELINE_DISABLE_WRAPPER
。尝试将其设置为True
。
看到https://django-pipeline.readthedocs.org/en/latest/configuration.html wrapped-javascript-output