Разрушение кэша на стороне клиента с использованием 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, поэтому я не знаю, насколько надежно это решение. Я не встречал никаких проблем с этим подходом, и он хорошо работает для моего сценария; однако, пожалуйста, используйте с осторожностью и проверяйте адекватно перед применением к производственному коду.

Другие вопросы по тегам