【每日一題NO.86】webpack打包文件時生成hash的機(jī)制是什么?


webpack hash 分類
1、輸出的結(jié)果全部使用 hash 的情況
每個文件都具有相同的 hash 值,因?yàn)?hash 是基于我們使用的所有源文件生成的。
如果重新運(yùn)行該構(gòu)建而不更改任何內(nèi)容,則生成的 hash 將保持不變。
如果僅僅編輯一個文件,則 hash 值將會發(fā)生變化,并且所有生成捆綁的名稱中都會包含此新的 hash 值
2、輸出的結(jié)果全部使用 chunkhash 的情況
chunkhash 是根據(jù)不同的入口進(jìn)行依賴文件解析,構(gòu)建對應(yīng)的 chunk,生成對應(yīng)的 hash 值
在使用上來說:我們把一些公共庫和程序入口文件區(qū)分開來,單獨(dú)打包構(gòu)建,接著可以采用 chunkhash 方式來生成 hash 值,那么只要我們不改動公共庫的代碼,就可以保證其 hash 值不受影響,這樣也起到緩存的作用。
3、輸出的結(jié)果全部使用 contenthash 的情況
每個生成的文件名稱都有一個唯一的 hash 值,該哈希值是根據(jù)該文件的內(nèi)容計(jì)算得出的。
當(dāng)要構(gòu)建的文件內(nèi)容發(fā)生改變的時候,就會生成新的 hash 值,且該文件的改變并不會影響和它同一個模塊下的其他文件。
hash被修改的條件
綜上,我們可以看出,如果使用 hash,并不是每次都會重新生成新的 hash,需要看具體使用的是哪種 hash 策略。
hash 是跟整個項(xiàng)目的構(gòu)建相關(guān),只要項(xiàng)目里有文件更改,整個項(xiàng)目構(gòu)建的 hash 值都會更改,并且全部文件都共用相同的 hash 值。
chunkhash 是根據(jù)不同的入口進(jìn)行依賴文件解析,構(gòu)建對應(yīng)的 chunk 生成相應(yīng)的 hash 值。只有被修改過的 chunk 在重新構(gòu)建之后才會生成新的 hash 值,不會影響其它的 chunk。
contenthash 是跟每個生成文件有關(guān),每個文件都有一個唯一的 hash 值。當(dāng)要構(gòu)建的文件內(nèi)容發(fā)生改變時,就會生成新的 hash 值,并且該文件的改變并不會影響和它同一模塊下的其他文件。
所有《每日一題》的 知識大綱索引腦圖 整理在此:https://www.yuque.com/dfe_evernote/interview/everyday
你也可以點(diǎn)擊文末的 “閱讀原文” 快速跳轉(zhuǎn)

