让 django-pipeline 和 bower 一起玩得很好

Posted

技术标签:

【中文标题】让 django-pipeline 和 bower 一起玩得很好【英文标题】:getting django-pipeline and bower to play nicely together 【发布时间】:2015-04-30 21:05:03 【问题描述】:

我正在将 Bower 组件安装到我的项目根目录下的 external/bower_components/。我在static 下还有其他静态文件以及一些已安装应用程序的一部分。我正在尝试使用 django-pipeline 来缩小所有位于 bower_components 中的静态文件,而我不理会其他静态文件。

我的问题是我不知道如何使用 django-pipeline 来缩小我的凉亭组件,同时又不将所有凉亭包复制到目标目录。

settings.py:

STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
    os.path.join(os.path.dirname(__file__), '..', 'external'),
)

STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'

PIPELINE = True

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'pipeline.finders.PipelineFinder',
)

当我运行python manage.py collectstatic 时,我最终会在staticfiles 中得到我想要的所有东西(静态基础中的东西以及从凉亭中提取的东西的缩小版本),加上完整的源代码在凉亭里的每一个包裹。这从最终用户的角度来看是可行的,但是我实际上并不想要很多多余的垃圾。

为了解决这个问题,我尝试了python manage.py collectstatic -i bower_components。但是在这种情况下,ignore 不仅会导致collectstatic 无法将文件复制过来,还会导致 django-pipeline 看不到文件,并最终导致

如果我尝试使用一些自定义管道查找器,例如 pipeline.finders.FileSystemFinder,它会导致 collectstatic 忽略我想要来自 django.contrib.admin 和我的 static/ 文件夹的所有静态脚本和 css。

有没有办法让我的蛋糕也吃起来,这样我就可以得到collectstatic的复制功能来关注一个组,而django-pipeline的组合/缩小关注另一个组?

写完之后,我意识到答案可能是使用PIPELINE_CSSPIPELINE_JS 显式收集和缩小我安装的应用程序中的所有脚本和css,但这似乎并不理想,因为每次这样做都会产生不寻常的开销集成了一个新应用。

【问题讨论】:

我将保留这个问题,但看起来django-compressor 可能比django-pipeline 更适合我的需求。 【参考方案1】:

是的,但是您需要修改静态查找器以将静态查找器更改为使用 django-pipeline 查找器:

STATICFILES_FINDERS = (
    'pipeline.finders.FileSystemFinder',
    'pipeline.finders.AppDirectoriesFinder',
    'pipeline.finders.CachedFileFinder',
    'pipeline.finders.PipelineFinder'
)

这应该只复制那里的相关文件。

【讨论】:

以上是关于让 django-pipeline 和 bower 一起玩得很好的主要内容,如果未能解决你的问题,请参考以下文章

理解bower是如何管理依赖的

自动化构建之bower

Django-Bower + Foundation 5 + SASS,如何配置?

bower

Grunt、NPM 和 Bower 之间的区别( package.json 与 bower.json )

bower