我有一个基于jQuery mobile和MVC的移动网站。不幸的是,有一些问题,javascript和CSS文件缓存在手机上,并且当我在网上进行一些更新时并不总是重新加载。
现在我正在为我的部署过程搜索一个powershell脚本,它将模式的帮助添加到所有javascript和css链接字符串“?v = randomnumber ”,这样每次更新时都会新加载javascript和css文件。例如:
<script type="text/javascript" src="http://localhost/scripts/myscript.js?v=21876">
因为我使用MVC,这个替换应该适用于放置在“views”文件夹及其所有子文件夹中的所有文件。
我不是在寻找缓存问题的其他解决方案。
所以第一步是循环“views”文件夹中的所有文件。我这样做了:
Get-ChildItem -Path "C:\inetpub\wwwroot\Inet\MyApp\Views" | ForEach-Object {
}
感谢您的帮助!
答案 0 :(得分:1)
要实现这一目标,您需要进行某种搜索和替换,以下内容应该可以帮助您,它使用guid作为唯一标识符。
$guid = [guid]::NewGuid()
$Search = "myscript.js"
$Replace = "myscript.js?v=$guid"
Get-ChildItem -Path "C:\inetpub\wwwroot\Inet\MyApp\Views" | ForEach-Object {
get-content $_ | % {$_ -replace $Search,$Replace} | Set-Content $_ -Force
}
值得一提的是,MVC 4可以自动执行此操作 - Bundling and Minification
编辑:使用正则表达式
的更详细示例$guid = [guid]::NewGuid()
$regex = ".js|.css"
$replace = "?v=$guid"
Get-ChildItem -Path "C:\inetpub\wwwroot\Inet\MyApp\Views" | ForEach-Object {
# store the filename for later and create a temporary file
$fileName = $_
$tempFileName = "$_.tmp"
new-item $tempFileName -type file -force | out-null
get-content $_ | % {
# try and find a match for the regex
if ($_ -match $regex)
{
# if a match has been found append the guid to the matched search criteria
$_ -replace $regex, "$($matches[0])$replace" | Add-Content $tempFileName
}
else
{
# no match so just add the text to the temporary file
$_ | Add-Content $tempFileName
}
}
# copy the temporary file to the original file (force to overwrite)
copy-item $tempFileName $fileName -force
# remove the temp file
remove-item $tempFileName
}