在斯芬克斯的conf.py本书中,我有:

html_css_files = ['css/custom.css']
html_js_files = ['js/custom.js']

但是,如果我在custom.jscustom.css中进行了任何更改,则此更改不会反映到用户的浏览器中,除非在客户机上强制重新加载http://www.example.com/_static/js/custom.js(对于CSS也是如此).

如何才能强制自定义的css+js永远不会在用户的浏览器上缓存?

推荐答案

尽管配置文件看起来只接受普通字符串值,但它实际上只是一个Python脚本,因此我们可以导入和使用随机数生成器等函数.

conf.py的顶部添加以下一行:

from secrets import token_urlsafe

将您的自定义CSS+JS更改为:

html_css_files = [f'css/custom.css?v={token_urlsafe(8)[:8]}']
html_js_files = [f'js/custom.js?v={token_urlsafe(8)[:8]}']

这将使您的定制的css+js文件像普通的css+js文件一样加载,末尾带有一个随机的8个字符的插件--从而禁用缓存:

<!-- Sphinx vanilla CSS: -->
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=80d5e7a1" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=19f00094" />
<link rel="stylesheet" type="text/css" href="../_static/copybutton.css?v=76b2166b" />

<!-- Our custom CSS now has a random slug, like vanilla: -->
<link rel="stylesheet" type="text/css" href="../_static/css/custom.css?v=Rdy7RNCQ" />

<!-- Sphinx vanilla JS: -->
<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=e91dff3d"></script>
<script src="../_static/doctools.js?v=888ff710"></script>
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
<script src="../_static/clipboard.min.js?v=a7894cd8"></script>
<script src="../_static/copybutton.js?v=f281be69"></script>

<!-- Our custom JS now has a random slug, like vanilla: -->
<script src="../_static/js/custom.js?v=8QronLhw"></script>

请注意,如果您在Docker中运行Sphinx,则?v=xxxxxxxx slug不会更改,除非您使用--no-cache选项运行docker build.

Javascript相关问答推荐

React Hooks中useState的同步问题

序列查找器功能应用默认值而不是读取响应

JS生成具有给定数字和幻灯片计数的数组子集

为什么我的includes声明需要整个字符串?

我可以使用CSS有效地实现最大宽度=100%和最大高度=100%,而无需父母有明确的/固定的宽度和高度,替代方法吗?

如何使覆盖div与可水平滚动的父div相关?

如何使用JavaScript将文本插入空div

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

分层树视图

屏幕右侧屏障上的产卵点""

无法从NextJS组件传递函数作为参数'

JS,当你点击卡片下方的绿色空间,而它是在它的背后转动时,

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

如何发送从REST Api收到的PNG数据响应

将数组扩展到对象中

图表4-堆叠线和条形图之间的填充区域

使用createBrowserRoutVS BrowserRouter的Reaction路由

使用可配置项目创建网格

如何在Firebase中读取对象的特定字段?

如何在Java脚本中添加一个可以在另一个面板中垂直调整大小的面板?