Как я могу динамически обновить имя Cache на моем сервисном работнике, чтобы включить номер сборки для автоматической аннулирования кэша при сборке - PullRequest
1 голос
/ 27 марта 2020

Для stati c файлов по всему сайту я включаю номер сборки из сборки TFS в качестве параметра строки запроса для очистки кэша typeof(NavigationHelper).Assembly.GetName().Version;

Я хочу иметь возможность сделать что-то подобное для обновления состояния c имя кэша в сервисном работнике, так что каждый раз, когда я развертываю сайт, он аннулирует кэш сервисного работника и извлекает последние файлы. В настоящее время у меня есть ...

const staticCacheName = "abc-cache-v1";

, но я не хочу вручную обновлять это staticCacheName каждый раз. В идеале я хочу получить что-то вроде

const staticCacheName = "abc-cache-v" + DYNAMIC_VERSION_NUMBER;

У работника сервиса нет доступа к документу или окну, так что выбор номера сборки сборки со страницы отсутствует, а служба рабочий находится в. js файле, поэтому не может получить доступ к MVC Razor logi c, поэтому я в тупике. 101

Есть мысли по поводу работы? Я видел решение с использованием веб-пакета, но я не хочу реализовывать веб-пакет только для управления версиями в одном файле. Остальные ресурсы js & обслуживаются из CDN, поэтому было бы излишним только 2 js файлов на root сайта.

1 Ответ

1 голос
/ 31 марта 2020

В итоге я добавил событие сборки в сборку Visual Studio и вызвал из него сценарий powershell.

Код командной строки события перед сборкой:

powershell.exe -ExecutionPolicy Unrestricted -File $(ProjectDir)ReplaceCacheText.ps1 -targetPath $(ProjectDir)\sw.js

И Powershell script:

param([string]$targetPath);
$Replace = "serviceworker-cache-v{0}" -f (Get-Date -format s)
(Get-Content -Path $targetPath) -replace 'serviceworker-cache-v[^"]*',$Replace | Set-Content -Path $targetPath

Здесь мы ищем начало строки и заменяем оставшуюся часть строки, пока не достигнем ограничительного символа ", чтобы заменить содержимое внутри" ". Без [^"] он ужасно заменит всю оставшуюся часть строки, включая "; в конце строки.

Большое спасибо AdminOfThings за помощь с powershell regex Требуется помощь скрипта Powershell - найдите слово, начинающееся с чего-то и заменить его

...