Потому что фронт в таком случае чаще всего раздается nginx’ом из docker контейнера, который собирается каждый раз новый при обновлении кода фронта. Т.е. новый контейнер не знает что там было, у него допустим тот же vendor.js файл.
Второй момент: браузер смотрит на ссылку, например, /assets/js/vendor.js, видит что в кэше уже был этот файл и не отправляет запрос заново. Если там есть суффикс, то для браузера это новый ресурс и он будет его грузить