Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
esm: ensure watch mode restarts after syntax errors
Move watch dependency reporting earlier in module resolution to ensure
file dependencies are tracked even when parsing fails.

Fixes: #61153
  • Loading branch information
Xstoudi committed Jan 1, 2026
commit 31caef8823a2574aab2ac8d1ca8f52809f2badeb
11 changes: 6 additions & 5 deletions lib/internal/modules/esm/loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -542,6 +542,12 @@ class ModuleLoader {
*/
#getOrCreateModuleJobAfterResolve(parentURL, resolveResult, request, requestType) {
const { url, format } = resolveResult;

if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) {
const type = requestType === kRequireInImportedCJS ? 'require' : 'import';
process.send({ [`watch:${type}`]: [url] });
}

// TODO(joyeecheung): update the module requests to use importAttributes as property names.
const importAttributes = resolveResult.importAttributes ?? request.attributes;
let job = this.loadCache.get(url, importAttributes.type);
Expand Down Expand Up @@ -570,11 +576,6 @@ class ModuleLoader {
assert(moduleOrModulePromise instanceof ModuleWrap, `Expected ModuleWrap for loading ${url}`);
}

if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) {
const type = requestType === kRequireInImportedCJS ? 'require' : 'import';
process.send({ [`watch:${type}`]: [url] });
}

const { ModuleJob, ModuleJobSync } = require('internal/modules/esm/module_job');
// TODO(joyeecheung): use ModuleJobSync for kRequireInImportedCJS too.
const ModuleJobCtor = (requestType === kImportInRequiredESM ? ModuleJobSync : ModuleJob);
Expand Down
Loading