使用CLI进行客户端缓存清除

时间:2016-09-23 01:28:07

标签: aurelia aurelia-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目录的编号,使其成为scripts1scripts2scriptsN

2 个答案:

答案 0 :(得分:11)

0.20.0支持

这是我的幸运日。 Math.max之前说过:

  

功能:支持捆绑修订号

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属性设置为true。

"options": {
   "minify": "stage & prod",
   "sourcemaps": "dev & stage", 
   "rev": true
},

output

中设置indexbuild.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上的来源

An aurelia-cli release from 8 hours

let defaultBuildOptions = {
  minify: "stage & prod",
  sourcemaps: "dev & stage",
  rev: false
};

cli/lib/build/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);       
}

答案 1 :(得分:3)

我的Aurelia应用程序托管在ASP.Net Core MVC页面中,使用ASP.Net Core asp-append-version标记帮助程序取得了很好的成功,以确保浏览器正确加载更新的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>

免责声明:我没有检查过app-bundle.js加载行为的vendor-bundle.js源代码,所以我不知道它有多强大这个解决方案是。我没有遇到过这种方法的任何问题,它对我的​​场景很有用;但是,在申请生产代码之前,请谨慎使用并进行充分测试。