Я делаю это с помощью следующего правила перезаписи для IIS. Все, что вам нужно сделать, это изменить номер версии при обновлении. Если у вас есть какая-либо автоматизация сборки, вы можете ее там автоматизировать.
<rewrite>
<rules>
<rule name="JS versioning" stopProcessing="true">
<match url="(.*).js" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsFile" />
<add input="{QUERY_STRING}" pattern="version=3911" negate="true" />
</conditions>
<action type="Redirect" url="{R:1}.js?version=3911" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
По сути, любые запросы на URL-адрес, заканчивающийся на .js, перехватываются и перенаправляются на тот же URL-адрес, но со строкой запроса с добавленным номером версии. Последующее условие необходимо для игнорирования URL-адресов, в которых уже есть строка запроса, в противном случае она перейдет в бесконечный цикл перезаписи.
Поскольку вы также хотите создавать версии файлов css, вы можете либо обновить URL-адрес совпадения до регулярного выражения, соответствующего js и css, либо создать отдельное правило, которое делает то же самое, но вместо этого предназначается для файлов css.