3

我目前使用 django-pipeline 安装了 PyReact JSX 编译器。

每当我对我的文件运行 collectstatic 时,它不会覆盖我的 react .jsx 和编译的 .js 文件的先前版本,而是在同一文件夹中创建一个新版本。有没有办法阻止这种情况并让程序简单地覆盖以前的版本?或者,使用 django-pipeline 的最佳实践是只使用一次吗?

我的设置.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'
4

1 回答 1

5

如果我正确理解您的问题,您担心的是,在运行之后,您的目录中collectstatic有类似foo.2d32ed.js,的文件。foo.4bhf45.jsfoo.09d9fg.jsSTATIC_ROOT

如果是这样,那么这不是 PyReact 甚至 django-pipeline 的问题;这是因为您使用的是缓存存储后端(即您的STATICFILES_STORAGE设置)。附加到文件名的字符串是文件内容的哈希值,它实际上就像静态文件的版本控制一样。

其原因是浏览器上的缓存清除。使用文件名作为文件内容的函数,浏览器可以永久缓存文件,这将加快用户后续访问的页面加载时间。

如果您想禁用此行为,您可以使用类似的非缓存存储后端PipelineStorage

以下是一些可能有帮助的文档:

于 2014-10-22T02:44:01.393 回答