Skip to main content

Module static_assets

Module static_assets 

Source
Expand description

固定路径静态资源的内容版本号。

全局样式、启动脚本和按需加载的浏览器库放在 public/ 下,文件名固定。页面引用它们时带 ?v=<内容摘要>:内容一变地址就变。EdgeOne 的缓存键包含查询参数,所以浏览器和 CDN 节点都能长期缓存,见 middleware::cache_control_for_path。只有版本号与当前文件一致时 才返回 immutable;滚动发布期间旧页面带旧版本号来请求,拿到的新内容仍须每次校验, 不会以旧地址被长期缓存。

服务端按文件内容计算摘要,按修改时间和长度缓存。make dev-assets 改了文件,下一次 渲染就会换新版本号。版本表经 shell 里的 <script type="application/json"> (id 为 VERSIONS_ELEMENT_ID)下发给浏览器:Rust 端用 url 读取,libs 用 @yggdrasil/shared 的 assetUrl 读取。文件不存在时(未构建 libs 的测试或开发环境) 返回不带版本号的地址,缓存策略也退回 no-cache。

Modules§

server 🔒

Constants§

ADMIN_CSS
后台与组件图鉴样式(Tailwind 产物,入口 input-admin.css)。
ADMIN_CSS_ELEMENT_ID
后台样式 <link> 的 id:SSR 写入与客户端补插共用,避免重复插入。
ALL
参与版本化的全部资源。后五项由 libs 按需加载,地址写在 libs/yggdrasil-core/src/browser-library.ts。
CORE_CSS
yggdrasil-core 样式。
CORE_JS
yggdrasil-core 启动脚本(导航协调器、主题、浏览器库加载器)。
ENHANCE_JS
正文增强脚本(mermaid、目录、changelog、瀑布流)。
HIGHLIGHT_CSS
代码高亮样式。
KATEX_CSS
KaTeX 样式。
LIGHTBOX_CSS
灯箱样式。
LIGHTBOX_JS
灯箱脚本。
STYLE_CSS
站点样式(Tailwind 产物)。
VERSIONS_ELEMENT_ID
下发版本表的 <script type="application/json"> 元素 id,libs 里同名常量须保持一致。

Functions§

ensure_admin_css
客户端导航进入需要后台样式的路由时补插 <link>:已存在(SSR 写入或之前插过)就不动, 离开后也不移除。由这些路由的 LazyRoute::data() 调用,样式与视图分包并行下载。
is_current
请求的 v 参数是否等于该资源当前的版本号。
needs_admin_css
该路径是否需要后台样式:后台 /admin… 与组件图鉴 /about/components…。
url
带版本号的地址;没有版本号(文件缺失)时原样返回。
versions_json
版本表 JSON({"/style.css":"…",…}),只含存在的文件。路径与摘要都不含需转义的字符。