我目前使用django-pipeline安装了PyReact JSX编译器。
每当我对我的文件运行collectstatic,而不是覆盖我的react .jsx和已编译的.js文件的先前版本时,它会在同一文件夹中创建一个新版本。有没有办法阻止这个并让程序只是覆盖以前的版本?或者,使用django-pipeline只使用一次的最佳做法是什么?
我的settings.py:
PIPELINE_COMPILERS = (
'react.utils.pipeline.JSXCompiler',
'pipeline.compilers.less.LessCompiler',
)
PIPELINE_JS = {
'bootstrap': {
'source_filenames': (
'twitter_bootstrap/js/transition.js',
'twitter_bootstrap/js/modal.js',
'twitter_bootstrap/js/dropdown.js',
'twitter_bootstrap/js/scrollspy.js',
'twitter_bootstrap/js/tab.js',
'twitter_bootstrap/js/tooltip.js',
'twitter_bootstrap/js/popover.js',
'twitter_bootstrap/js/alert.js',
'twitter_bootstrap/js/button.js',
'twitter_bootstrap/js/collapse.js',
'twitter_bootstrap/js/carousel.js',
'twitter_bootstrap/js/affix.js',
),
'output_filename': 'js/b.js',
},
'clubs': {
'source_filenames': (
'js/clubs.jsx',
),
'output_filename': 'js/clubs.js',
},
'react': {
'source_filenames': (
'react/js/react.min.js',),
'output_filename': 'js/r.js',
},
'jquery': {
'source_filenames': (
'js/jquery.js',
),
'output_filename': 'js/jq.js',
},
}
STATIC_ROOT = BASE_DIR + '/static/'
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
答案 0 :(得分:5)
如果我正确理解了您的问题,那么您担心的是,在collectstatic
运行后,foo.2d32ed.js
中有foo.4bhf45.js
,foo.09d9fg.js
,STATIC_ROOT
等文件。目录
如果是这样,那么这不是PyReact或django-pipeline的问题;这是因为您正在使用缓存存储后端(即您的STATICFILES_STORAGE
设置)。附加到文件名的字符串是文件内容的散列,有效地类似于静态文件的版本。
原因是浏览器上的缓存破坏。使用文件名作为文件内容的功能,浏览器可以永久缓存文件,这将加快用户在后续访问时的页面加载时间。
如果要禁用此行为,可以使用非缓存存储后端,例如PipelineStorage
。
以下是一些可能有用的文档: