Javascript 什么时候';您不接受重新加载网页包热模块吗?
因此,对于webpack,只有当您的模块或模块的父模块中有以下代码时,HMR才会起作用:Javascript 什么时候';您不接受重新加载网页包热模块吗?,javascript,webpack,webpack-dev-server,webpack-hmr,Javascript,Webpack,Webpack Dev Server,Webpack Hmr,因此,对于webpack,只有当您的模块或模块的父模块中有以下代码时,HMR才会起作用: if (module.hot) { module.hot.accept() } 这让我想知道为什么你会拒绝HMR放在首位。使用它是否会带来性能成本或其他负面影响 这个问题的答案不是很清楚。只有在您的代码 是无状态的(如CSS)或 提供清理旧状态的准备 因为大多数代码不是无状态的,所以需要做一些额外的工作。实现这一点的常用方法是用代理替换导出的函数(代理以类似的方式工作)。因此,可以在不更新其他依赖
if (module.hot) {
module.hot.accept()
}
这让我想知道为什么你会拒绝HMR放在首位。使用它是否会带来性能成本或其他负面影响
这个问题的答案不是很清楚。只有在您的代码
- 是无状态的(如CSS)或
- 提供清理旧状态的准备
add
函数,因为其他模块持有对它的引用。这就是为什么需要一个封装导出函数的代理:
function _add(a, b) {
return a - b;
}
export function add(a, b) {
return _add(a, b);
};
现在您可以轻松地调出\u添加,而无需更新其他模块。这对函数非常有效,但对其他类型(如导出的对象、数字、字符串)无效。然而,通过使用,可以导出在所有类型上都像代理一样工作的占位符
因此,HMR面临的挑战是,您需要用新代码替换旧代码,而不留下任何奇怪的状态。这仍然很难用一般的方法来实现
function _add(a, b) {
return a - b;
}
export function add(a, b) {
return _add(a, b);
};