Skip to content

perf(module-runner): use module.registerHooks when available#20980

Merged
sapphi-red merged 1 commit intovitejs:mainfrom
sapphi-red:perf/module-runner-use-module-register-hooks
Oct 22, 2025
Merged

perf(module-runner): use module.registerHooks when available#20980
sapphi-red merged 1 commit intovitejs:mainfrom
sapphi-red:perf/module-runner-use-module-register-hooks

Conversation

@sapphi-red
Copy link
Member

Description

I haven't actually tested whether this is more performant (I assume it is because a worker doesn't have to be spawned).

#20962 (comment)

@sapphi-red sapphi-red added p2-nice-to-have Not breaking anything but nice to have (priority) performance Performance related enhancement labels Oct 22, 2025
@sapphi-red
Copy link
Member Author

Tested with console.time. module.register was around 30 to 50ms while module.registerHooks was around 0.03ms. 🫡

@sapphi-red sapphi-red merged commit 9c8a780 into vitejs:main Oct 22, 2025
18 checks passed
@sapphi-red sapphi-red deleted the perf/module-runner-use-module-register-hooks branch October 22, 2025 11:18
arcanis added a commit to yarnpkg/berry that referenced this pull request Nov 7, 2025
## What's the problem this PR addresses?

Node.js added support for a `conditions` flag in
[`_resolveFilename`](https://github.com/nodejs/node/blob/525c4fb316a8074bea4e4aad358c3b376e99826c/lib/internal/modules/cjs/loader.js#L1340)
(and thus indirectly
[`require.resolve`](https://github.com/nodejs/node/blob/e72761fe5e855747012ba485df77c0e3da189b83/lib/internal/modules/helpers.js#L161-L166)),
but they forgot to
[document](https://nodejs.org/api/modules.html#requireresolverequest-options)
this new option. As a result our hook rightfully refuses to perform the
resolution since it doesn't know what to do with this flag.

This is more an issue when using the new `registerHook` API because it
then stops going into [this
codepath](https://github.com/nodejs/node/blame/a7999c602cf7d70095dab3e5201d8c2f4b6a1867/lib/internal/modules/cjs/loader.js#L1051-L1055),
causing a `conditions` option to always be injected.

Vite recently [started](vitejs/vite#20980) using
this API as of 7.2.0, so it now crashes.

## How did you fix it?

Adds support for the `conditions` option (we already supported it, it's
just that we weren't forwarding it, since Node.js didn't support it).

## Checklist

<!--- Don't worry if you miss something, chores are automatically
tested. -->
<!--- This checklist exists to help you remember doing the chores when
you submit a PR. -->
<!--- Put an `x` in all the boxes that apply. -->
- [x] I have read the [Contributing
Guide](https://yarnpkg.com/advanced/contributing).

<!-- See
https://yarnpkg.com/advanced/contributing#preparing-your-pr-to-be-released
for more details. -->
<!-- Check with `yarn version check` and fix with `yarn version check
-i` -->
- [x] I have set the packages that need to be released for my changes to
be effective.

<!-- The "Testing chores" workflow validates that your PR follows our
guidelines. -->
<!-- If it doesn't pass, click on it to see details as to what your PR
might be missing. -->
- [x] I will check that all automated PR checks pass before the PR gets
reviewed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

p2-nice-to-have Not breaking anything but nice to have (priority) performance Performance related enhancement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants