Какую стратегию хеширования ассетов выбрать в Webpack?



Несколько месяцев назад проходил мимо Storybook и заметил, что в нём для хеширования ассетов используется [hash] (он же [fullhash]). Это хеш всей компиляции. Таким образом каждую компиляцию все ассеты получали новый хеш, даже если их контент не поменялся.



Справедливости ради, в рамках сторибука это особо не важно, т.к. в большинстве случаев это инструмент для внутреннего использования. Но неопытные разработчики могут посмотреть на сторибук и сделать так же.



Что же до выбора стратегии, то всё очень просто — используйте [contenthash]. Этот хеш зависит именно от содержимого каждого конкретного чанка. Вот мой пул реквест.



Кстати, оказалось, что по пути я исправил и утечку памяти. Дело в том, что при использовании Webpack Dev Server ассеты пишутся не на диск, а в оперативную память с помощью memfs, т.к. это быстрее и экономит ресурс SSD. В таком случае на каждое изменение появлялись новые ассеты, а старые оставались в оперативной памяти. Именно по этой причине не нужно использовать хеширование в development режиме. Хотя давным-давно я думал, что это просто из-за того, что операция хеширования существенно замедляет рекомпиляцию.



Ну а поглядеть какие ещё бывают виды хешей можно вот здесь.