模塊熱替換(Hot Module Replacement)
模塊熱替換(Hot Module Replacement)
模塊熱替換(HMR)通過在運(yùn)行時(shí)自動(dòng)更新瀏覽器中的模塊,而不需要刷新整個(gè)頁面來改進(jìn)開發(fā)體驗(yàn)。 這意味著應(yīng)用程序狀態(tài)可以在小的更改時(shí)保留。 Parcel 的 HMR 實(shí)現(xiàn)支持開箱即用的JavaScript 和 CSS 資源。 在生產(chǎn)模式下打包時(shí),HMR 自動(dòng)被禁用。
在保存文件時(shí),Parcel 會(huì)重建所更改的內(nèi)容,并將更新發(fā)送到包含新代碼的任何正在運(yùn)行的客戶端。 新的代碼會(huì)替換舊版本,并與所有的父級(jí)資源一起重新計(jì)算。 你可以使用 module.hot API 掛接到這個(gè)過程中,這個(gè)API可以在一個(gè)模塊即將被丟棄時(shí)或者當(dāng)一個(gè)新版本進(jìn)入時(shí)通知你的代碼。像 react-hot-loader 這樣的項(xiàng)目可以幫助你完成該過程,并通過 Parcel 開箱即用。
有兩種已知的方法:module.hot.accept 和 module.hot.dispose 。你可以在module.hot.accept中使用回調(diào)函數(shù),該函數(shù)在模塊或其任何依賴項(xiàng)被更新時(shí)執(zhí)行。 當(dāng)該模塊即將被替換時(shí),module.hot.dispose 回調(diào)函數(shù)會(huì)被調(diào)用。
if (module.hot) { module.hot.dispose(function () { // 模塊即將被替換時(shí) }); module.hot.accept(function () { // 模塊或其依賴項(xiàng)之一剛剛更新時(shí) }); }
安全寫入
一些文本編輯器和 IDE 有一個(gè)名為 safe write(安全寫入)的功能,這基本上可以防止數(shù)據(jù)丟失,通過獲取文件的副本并在保存時(shí)對(duì)其進(jìn)行重命名。
使用模塊熱加載(HMR)時(shí),此功能會(huì)阻止文件更新的自動(dòng)檢測(cè),要禁用 safe write(安全寫入),請(qǐng)使用下面提供的選項(xiàng):
Sublime Text 3 將 atomic_save: "false" 添加到你的用戶偏好設(shè)置中。
IntelliJ 在首選項(xiàng)中使用搜索來查找 "safe write" 并禁用它。 *Vim 將 :set backupcopy=yes 添加到你的設(shè)置。
WebStorm 取消選中 首選項(xiàng) > 外觀和行為 > 系統(tǒng)設(shè)置 中的 "safe write" 。