fix: unify the error handling for hmrDownloadManifest (#19835)

This commit is contained in:
Xiao 2025-08-25 22:03:25 +08:00 committed by GitHub
parent a0f19f7c50
commit 914db1f7ca
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 71 additions and 5 deletions

View File

@ -392,8 +392,8 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
[ [
`return ${importFunctionName}(/* webpackIgnore: true */ url).then(onResolve).catch(onReject)` `return ${importFunctionName}(/* webpackIgnore: true */ url).then(onResolve).catch(onReject)`
] ]
)} )}`,
loadScript(url, onResolve, onReject);` "loadScript(url, onResolve, onReject);"
] ]
)});` )});`
]), ]),
@ -411,7 +411,10 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
RuntimeGlobals.getUpdateManifestFilename RuntimeGlobals.getUpdateManifestFilename
}()).then(${runtimeTemplate.basicFunction("obj", [ }()).then(${runtimeTemplate.basicFunction("obj", [
"return obj.default;" "return obj.default;"
])}, ${runtimeTemplate.basicFunction("", "")});` ])}, ${runtimeTemplate.basicFunction("error", [
"if(['MODULE_NOT_FOUND', 'ENOENT'].includes(error.code)) return;",
"throw error;"
])});`
])};` ])};`
]) ])
: "// no HMR manifest" : "// no HMR manifest"

View File

@ -264,7 +264,7 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
Template.indent([ Template.indent([
"if(err) {", "if(err) {",
Template.indent([ Template.indent([
'if(err.code === "ENOENT") return resolve();', 'if(["MODULE_NOT_FOUND", "ENOENT"].includes(err.code)) return resolve();',
"return reject(err);" "return reject(err);"
]), ]),
"}", "}",

View File

@ -223,7 +223,10 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
RuntimeGlobals.getUpdateManifestFilename RuntimeGlobals.getUpdateManifestFilename
}());` }());`
]), ]),
"})['catch'](function(err) { if(err.code !== 'MODULE_NOT_FOUND') throw err; });" `}).catch(${runtimeTemplate.basicFunction("err", [
"if(['MODULE_NOT_FOUND', 'ENOENT'].includes(err.code)) return;",
"throw err;"
])});`
]), ]),
"}" "}"
]) ])

View File

@ -0,0 +1,22 @@
if (module.hot) {
module.hot.accept()
}
it('Should work', (done) => {
expect(1).toBe(1)
NEXT(
require("../../update")(done, true, () => {
done();
})
);
})
---
// https://github.com/webpack/webpack/pull/19832#event-19319802751
// This is because within the checkForUpdate(hot/signal.js), we will proactively check for updates again. If there are no updates at this time, it is acceptable.
it('Should be no error when the HMR update detects that the hot-update.json file does not exist', (done) => {
expect(1).toBe(1)
__webpack_require__.hmrM().then(() => {
done()
}).catch((err) => {
done(err)
})
})

View File

@ -0,0 +1,25 @@
import update from "../../update.esm.js";
if (import.meta.webpackHot) {
import.meta.webpackHot.accept()
}
it('Should work', (done) => {
expect(1).toBe(1)
NEXT(
update(done, true, () => {
done();
})
);
})
---
// https://github.com/webpack/webpack/pull/19832#event-19319802751
// This is because within the checkForUpdate(hot/signal.js), we will proactively check for updates again. If there are no updates at this time, it is acceptable.
it('Should be no error when the HMR update detects that the hot-update.json file does not exist', (done) => {
expect(1).toBe(1)
__webpack_require__.hmrM().then(() => {
done()
}).catch((err) => {
done(err)
})
})

View File

@ -0,0 +1,13 @@
"use strict";
module.exports = {
experiments: {
outputModule: true
},
output: {
module: true,
library: {
type: "module"
}
}
};