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

时间:2018-01-18 15:25:57

标签: sharepoint sharepoint-2013

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

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

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

1 个答案:

答案 0 :(得分:2)

您的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)附加到文件引用(通常在母版页,页面布局,webpart引用,脚本链接等任何地方引用) )。将查询字符串附加到文件时,它将强制浏览器下载该文件的较新版本。更喜欢这种方法,因为它不会不必要地清除BLOB中的其他文件。