Разрушение кэша на стороне клиента с использованием CLI
Мы используем aurelia-cli
, Задачи включают в себя следующие:
build.json
build.ts
process-css.ts
process-markup.ts
process-sass.ts
run.json
run.ts
test.json
test.ts
transpile.ts
Как, если вообще мы делаем решение для очистки кэша с Cli?
То, что мы уже пробовали, это увеличить число scripts
каталог, чтобы он шел scripts1
, scripts2
, scriptsN
,
2 ответа
Поддержка 0.20.0
Это мой счастливый день. aurelia-cli
релиз от 8 часов назад говорит об этом:
Особенности: Поддержка номера ревизии пакета
Walkthru
Сначала установите 0.20.0 и создайте новое приложение.
npm install aurelia-cli@">=0.20.0" -g
au new my-app
Или обновите существующее приложение.
npm install aurelia-cli@">=0.20.0" --save-dev
Далее откройте my-app/aurelia-project/aurelia.json
,
Установить build.options.rev
свойство к истине.
"options": {
"minify": "stage & prod",
"sourcemaps": "dev & stage",
"rev": true
},
Установить output
а также index
свойства внутри build.targets
"targets": [
{
"id": "web",
"displayName": "Web",
"output": "scripts",
"index": "index.html"
}
],
aurelia-cli
будет искать index
файл и заменить ссылку на scripts\vendor-bundle.js
как это:
<script src="scripts\vendor-bundle.js" data-main="aurelia-bootstrapper">
<script src="scripts\vendor-bundle-947c308e28.js" data-main="aurelia-bootstrapper">
Наконец, соберите приложение.
au build --env prod
Ваши пакеты будут выглядеть примерно так:
app-bundle-e0c4d46f7d.js
vendor-bundle-dba9184d78.js
Источник на GitHub
CLI / Lib / сборки / bundler.js
let defaultBuildOptions = {
minify: "stage & prod",
sourcemaps: "dev & stage",
rev: false
};
CLI / Lib / сборки / bundler.js
if (buildOptions.rev) {
//Generate a unique hash based off of the bundle contents
this.hash = generateHash(concat.content);
bundleFileName = generateHashedPath(this.config.name, this.hash);
}
Мое приложение Aurelia размещено на странице ASP.Net Core MVC, и я добился хорошего успеха при использовании ASP.Net Core asp-append-version
Tag Helper, чтобы браузеры правильно загружали обновленные пакеты JS.
Этот атрибут может быть добавлен в теги сценария, и ASP.Net автоматически добавит версию # на основе содержимого файла сценария. Хеш генерируется при запуске приложения, поэтому приложение должно быть перезапущено, чтобы ASP.Net обнаружил любые новые изменения.
Хитрость в том, чтобы заставить это работать с Aurelia, заключается также в добавлении файла app-bundle.js в качестве тега скрипта на странице хостинга:
<body aurelia-app="main-public" class="public">
<script src="scripts/vendor-bundle.js"
data-main="aurelia-bootstrapper"
asp-append-version="true"></script>
<script src="scripts/app-bundle.js"
asp-append-version="true"></script>
</body>
Вывод выглядит примерно так:
<body aurelia-app="main-public" class="public">
<script src="scripts/vendor-bundle.js?v=97hNIHUQnLL3Q44m2FWNV-3NIpgqvgIDIx5sUXUcySQ" data-main="aurelia-bootstrapper"></script>
<script src="scripts/app-bundle.js?v=htYOQIr-GHrpZIDiT2b32LxxPZs10cfUU4YNt9iKLro"></script>
</body>
Отказ от ответственности: я не проверял исходный код vendor-bundle.js в отношении поведения загрузки app-bundle.js, поэтому я не знаю, насколько надежно это решение. Я не встречал никаких проблем с этим подходом, и он хорошо работает для моего сценария; однако, пожалуйста, используйте с осторожностью и проверяйте адекватно перед применением к производственному коду.