JS 文件未在站点资产中更新

JS Files not updating in Site Assets

好的,我以前从未见过这样的东西,希望其他人也见过。我刚刚将我们的开发和测试服务器修补到 Nov2017CU (SharePoint 2013)。从那时起,任何使用站点资产中的 JS 注入的解决方案都不会更新。我将对文件进行更改,库反映我进行了更改,但是当我尝试加载访问 js 文件的页面时,更改没有反映出来。硬刷新和完全缓存清理不会影响它。如果我关闭并重新打开我的编辑器 (VSCode),我的更改就会消失。当我查看版本历史时,当前版本没有我的更改,但以前的版本有。如果我尝试恢复到那个版本,它不会(仍然显示文件的以前版本)。

这就是它变得格外奇怪的地方。我已经从库中删除了整个文件。重置 IIS(哎呀,我什至一次重新启动了服务器)。它仍然以某种方式加载文件。该文件不再在库中,但服务器仍在将其提供给浏览器。我已经确认它不是从其他位置获取的,因为开发工具显示该文件位于资产库中,该文件已从中删除。即使以前从未访问过该站点的用户仍然可以在他们的浏览器中获取该文件。

这也不限于单个站点。我在不同的子站点(同一站点集)中有其他开发人员遇到相同的问题。 有人见过这个吗?

看起来您的 Web 应用程序启用了 BLOB 缓存,这导致文件从缓存中提供。

有两种修复方法:

1) 粗暴的方法是使用提到的 powershell 命令刷新 BLOB 缓存:

$webApp = Get-SPWebApplication "<WebApplicationURL>" 
[Microsoft.SharePoint.Publishing.PublishingCache]::FlushBlob‌​Cache($webApp) 

这将刷新 BLOB 中的所有文件。通常,文件根据 max-age 属性值进行缓存。因此,这就是即使您已将其从源中删除,您的文件仍可提供服务的原因。

2) 外科手术刀方法是将查询字符串(如 (https://sitecollurl/siteassets/app.js?v=1.1) 附加到文件引用(通常在母版页、页面布局、Web 部件引用、脚本链接等任何位置)被引用)。当您将查询字符串附加到文件时,它将强制浏览器下载该文件的较新版本。更喜欢这种方法,因为它不会不必要地从 BLOB 中清除其他文件。