I am using require.js to require JS modules in my application.
I need a way to bust client cache on new JS modules, by way of a different requested URL.
i.e., if the file hello/there.js has already been cached on the client, I can change the file name to force the browser to get the new file.
In other words, for the module hello/there, I’d like require.js to request the url hello/there___v1234___.js (the file name can look different, it’s just an example), according to a version string which is accessible on the client.
What is the best way to achieve that?
OK, I googled “requirejs cache bust” for you and found this existing SO answer, which says you can configure requireJS with an
urlArgsparameter, which is only a partial solution, but it might be enough to meet your immediate needs.That said, the cachebusting problem is full of challenges and many “solutions” don’t actually solve the problem in its entirety. The only maintainable way to do this (IMHO as of now) is with a full-on asset management system like the Ruby on Rails asset pipeline or connect-assets or the equivalent for your server side framework of choice. Those can correct compute a checksum (usually MD5 or SHA1) of the content of each file and give you the file names you need to put as URLs in your HTML
scripttags. So, don’t bother with manually changing filenames based on version numbers, just use checksums since they are easily automated and foolproof.From what I can tell, out of the box requirejs can’t do the cachebusting aspect for you. You might want to read this google groups thread. Otherwise, you may need to pair requirejs with an additional tool/script to get you good cachebuster checksums.