Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么时候';您不接受重新加载网页包热模块吗?_Javascript_Webpack_Webpack Dev Server_Webpack Hmr - Fatal编程技术网

Javascript 什么时候';您不接受重新加载网页包热模块吗?

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)或 提供清理旧状态的准备 因为大多数代码不是无状态的,所以需要做一些额外的工作。实现这一点的常用方法是用代理替换导出的函数(代理以类似的方式工作)。因此,可以在不更新其他依赖

因此,对于webpack,只有当您的模块或模块的父模块中有以下代码时,HMR才会起作用:

if (module.hot) {
  module.hot.accept()
}
这让我想知道为什么你会拒绝HMR放在首位。使用它是否会带来性能成本或其他负面影响


这个问题的答案不是很清楚。

只有在您的代码

  • 是无状态的(如CSS)或
  • 提供清理旧状态的准备
因为大多数代码不是无状态的,所以需要做一些额外的工作。实现这一点的常用方法是用代理替换导出的函数(代理以类似的方式工作)。因此,可以在不更新其他依赖项的情况下替换代理背后的实际实现

例如,想象一下这个(buggy)模块:

注意到错误后,您不能动态地交换
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);
};