cachingangularbrowser-cachecache-controlangular2-template

How to prevent Browser cache on Angular 2 site?


We're currently working on a new project with regular updates that's being used daily by one of our clients. This project is being developed using angular 2 and we're facing cache issues, that is our clients are not seeing the latest changes on their machines.

Mainly the html/css files for the js files seem to get updated properly without giving much trouble.


Solution

  • angular-cli resolves this by providing an --output-hashing flag for the build command (versions 6/7, for later versions see here). Example usage:

    ng build --output-hashing=all
    

    Bundling & Tree-Shaking provides some details and context. Running ng help build, documents the flag:

    --output-hashing=none|all|media|bundles (String)
    
    Define the output filename cache-busting hashing mode.
    aliases: -oh <value>, --outputHashing <value>
    

    Although this is only applicable to users of angular-cli, it works brilliantly and doesn't require any code changes or additional tooling.

    Update

    A number of comments have helpfully and correctly pointed out that this answer adds a hash to the .js files but does nothing for index.html. It is therefore entirely possible that index.html remains cached after ng build cache busts the .js files.

    At this point I'll defer to How do we control web page caching, across all browsers?