vite hmr热更新

1、请确保用一个条件语句守护所有 HMR API 的使用,这样代码就可以在生产环境中被 tree-shaking 优化:
	if (import.meta.hot) {
	  // HMR 代码
	}

2、hmr相关api
	(1)hot.accept
		接收自身模块热更新
		
			export const count = 1

			if (import.meta.hot) {
			  import.meta.hot.accept((newModule) => {
			  	newModule为自身模块
			    console.log('updated: count is now ', newModule.count)
			  })
			}
		
		接收依赖项进行更新
			import { foo } from './foo.js'
			foo()
			
			if (import.meta.hot) {
			  import.meta.hot.accept('./foo.js', (newFoo) => {
			    回调函数接收到更新后的'./foo.js' 模块
			    newFoo.foo()
			  })
			
			  也可以接受一个依赖模块的数组:
			  import.meta.hot.accept(
			    ['./foo.js', './bar.js'],
			    ([newFooModule, newBarModule]) => {
			      回调函数接收一个更新后模块的数组
			    }
			  )
			}
	
	(2)hot.dispose
		一个接收自身的模块或一个期望被其他模块接收的模块可以使用hot.dispose来清除任何由其更新副本产生的持久副作用
		
		function setupSideEffect() {}

		setupSideEffect()
		
		if (import.meta.hot) {
		  import.meta.hot.dispose((data) => {
		    清理副作用,如模块中开启了定时器,热更新会造成再次重复开启
		    
		  })
		}
	
	(3)hot.data
		import.meta.hot.data对象在同一个更新模块的不同实例之间持久化。它可以用于将信息从模块的前一个版本传递到下一个版本
	
	(4)hot.decline()
		表示此模块不可热更新,如果在传播 HMR 更新时遇到此模块,浏览器应该执行完全重新加载
	
	(5)hot.invalidate()
		现在调用 import.meta.hot.invalidate() 只是重新加载页面。
	
	(6)hot.on(event, cb)
		.监听自定义hmr事件
		
		vite内置事件
			'vite:beforeUpdate' 当更新即将被应用时(例如,一个模块将被替换)
			'vite:beforeFullReload' 当完整的重载即将发生时
			'vite:beforePrune' 当不再需要的模块即将被剔除时
			'vite:error' 当发生错误时(例如,语法错误)
		
		自定义监听
			配合插件的handleHotUpdate进行发送
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值