You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular文件名哈希编码及字符范围咨询(Cache busting适配)

Angular新版带哈希文件名的哈希字符范围及ASP.NET Core缓存控制方案

新旧格式对比

旧版Angular哈希文件名

结构:[名称].[16位十六进制哈希].[扩展名]
示例:

runtime.59772ce71fd8c096.js
polyfills.efe34593e33fb8e1.js
scripts.109c3e02aa410456.js
main.3645a30dcf6ebeb0.js

哈希部分为16位十六进制字符(0-9、a-f/A-F)。

新版Angular哈希文件名

结构:[名称]-[8位哈希].[扩展名]
示例:

styles-GCSEUS35.css
chunk-NLN56U2H.js
polyfills-UCPGG4LZ.js
main-UFPD5ECZ.js

新版哈希字符范围

新版哈希采用自定义base32编码变种,允许的字符范围为:

  • 大写英文字母:A-Z(包含Crockford base32排除的U字符)
  • 数字:0-9

实际构建输出中,哈希部分仅由上述36个字符组成,无小写字母或特殊符号。

ASP.NET Core识别与缓存控制实现

要实现针对这类哈希文件的长期缓存,可通过正则表达式匹配文件名,并在静态文件中间件中设置缓存头:

正则匹配规则

使用以下正则表达式识别符合格式的文件:

^([a-z0-9-]+)-([A-Z0-9]{8})\.(js|css)$
  • ^([a-z0-9-]+):匹配文件前缀(支持包含连字符的前缀,如chunk-vendors)
  • -([A-Z0-9]{8}):匹配8位哈希段,限定为大写字母和数字
  • \.(js|css)$:匹配常见的Angular静态文件扩展名

缓存控制代码示例

在ASP.NET Core的Startup/Program.cs中配置静态文件中间件:

app.UseStaticFiles(new StaticFileOptions
{
    OnPrepareResponse = context =>
    {
        var fileName = Path.GetFileName(context.File.Name);
        var hashFileRegex = new Regex(@"^([a-z0-9-]+)-([A-Z0-9]{8})\.(js|css)$");
        
        if (hashFileRegex.IsMatch(fileName))
        {
            // 设置长期缓存:1年有效期,标记为不可变,避免浏览器重新验证
            context.Context.Response.Headers.Append(
                "Cache-Control", "public, max-age=31536000, immutable");
        }
    }
});

内容的提问来源于stack exchange,提问作者Jesús López

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 01:22:23