Django:在发布前自动缩小 css/js 文件

Posted

技术标签:

【中文标题】Django:在发布前自动缩小 css/js 文件【英文标题】:Django: auto minifying css/js files before release 【发布时间】:2011-03-04 23:52:30 【问题描述】:

我有以下情况:我想在开发期间使用未压缩的 js/css 文件(例如调试 js),但在生产中我想自动切换到该文件的缩小版本。

一些简单的解决方案是放入您的模板:

<script src="some_js.% if not debug %min.% endif %js"....

但这需要手动提供这样的文件,并在原始文件更改后进行缩小手动操作。

您如何在您的项目中实现这一点?有这方面的工具吗?

【问题讨论】:

djangopackages.com/grids/g/asset-managers 我个人喜欢您的解决方案,并计划使用它。我有一个 prep_release 脚本,它使用 CLI 版本的 npm 工具构建资产。所以基本上一个开发人员打开了调试,但要测试生产版本,打开调试,运行 prep_release 脚本。没有隐藏的魔法!根据我的研究,从 gulp/webpack/etc 转向 CLI。 PS libsass-python 非常适合 CSS/SASS。 【参考方案1】:

你试过django-compress吗?

请参阅http://djangopackages.com/grids/g/asset-managers/ 以获得相当完整的 Django 可用资产管理器列表...

如果您已经在使用 django-compress,您应该看看升级到 django-pipeline,这是一个维护良好的分支,具有许多新功能。我鼓励所有使用 django-compress 的人改用 django-pipeline:* django-pipeline documentation

【讨论】:

django-compress 已被django-pipeline 取代,根据他们的site 此应用不再维护 :-( django-pipeline requires >=Django 1.4.2 这不适合我的需要,我发现了其他一些:github.com/jezdez/django_compressor 和 sgawebsites.com/projects/django-aggregator【参考方案2】:

Django-compress 不再维护。请改用https://github.com/cyberdelia/django-pipeline。

【讨论】:

他们的 github 帐户显示了最近的工作。有没有声明什么的? 截至2018年4月,正在积极维护中。 django_compressor 仍然有效。 django-pipeline 无法在 Windows 上使用 yuglify。物有所值。【参考方案3】:

我一直在使用webassets,到目前为止我非常满意。我真正喜欢它的是,您仍然可以在模板中定义 CSS 和 JS 文件,而不是在项目配置中。

可以在以下位置找到文档:http://elsdoerfer.name/docs/webassets/

【讨论】:

django-assets 有一个新名称:webassets 你好 heyman :) 好久不见。您还在使用网络资产吗?你对 webassets 和 django-pipeline 有什么看法?很难决定。我可以欣赏模板内联功能,但 django-pipeline 似乎可以更好地处理图像和 Flash 文件等非代码资产。我弄错了吗?网络资产能否优雅地处理这些文件类型? 嘿 Magnus,我现在也在做同样的决定(django-pipeline vs webassets,django-compressor 遥遥领先)。你是如何在它们之间做出选择的? 嗨马格努斯 :)!对不起,我错过了这个回复。是的,我仍然在 Django 项目和 Flask 项目中使用网络资产。我非常喜欢它,尽管我不再在模板中定义我的包。但是我没有使用过 django-pipeline,所以我无法真正比​​较它们。【参考方案4】:

截至 2016 年底,这些答案大多已过时。

在此处查看几个选项: https://gitlab.com/rosarior/awesome-django#asset-management

目前,django-compressor 是一个不错的选择,但也有其他选择,具体取决于您想要做什么。我相信 webpack 现在也越来越流行了。

【讨论】:

你应该删除指向“awesome-django”的链接——它现在只是一系列模糊的抱怨和抱怨,没有 Python 资源或帮助缩小。删除后,我会将反对票转为赞成票。【参考方案5】:

我写了this Makefile 来缩小和连接我的 JS 和 CSS 文件。这取决于YUI Compressor JAR。 更新文件后,您仍然需要运行make。不过,您可以让它在服务器启动和/或重新加载时运行,或者在您的 SCM 上设置一个提交挂钩。

当然,您仍然需要% if not debug %,但支付 IMO 的代价很小。

显示简单用法:

$ make
[css] static/css/first.css
[css] static/css/second.css
[css] static/css/third.css
[css] static/css/and_so_on.css
[tag] @import url("static/css/all.css");
[js] static/js/first.js
[js] static/js/second.js
[js] static/js/third.js
[js] static/js/and_so_on.js
[tag] <script type="text/javascript" src="static/js/all.js"></script>
Done.

【讨论】:

【参考方案6】:

刚刚发布了一个开源项目,它可以监视目录的变化并自动缩小 JS、自动编译 SASS/SCSS、运行命令行操作等。

查看http://devWatchr.com/

它在开发过程中在您的系统上使用pythonpyinotify 运行。

【讨论】:

以上是关于Django:在发布前自动缩小 css/js 文件的主要内容,如果未能解决你的问题,请参考以下文章

合并和缩小多个 CSS / JS 文件

在 CodeIgniter 中有效地缩小 CSS 和 JS

Webpack 将 scss 编译为 css 并缩小

带有 css/js 的 Django“包含”模板

如何在 django 中链接我的 css、js 和图像文件链接

无法在 django python 中提供诸如 css、js 之类的静态文件