fix: this.resolve() returns null for bare relative paths without importer#9142
Merged
fix: this.resolve() returns null for bare relative paths without importer#9142
this.resolve() returns null for bare relative paths without importer#9142Conversation
✅ Deploy Preview for rolldown-rs canceled.
|
Copilot
AI
changed the title
[WIP] Fix null return for bare relative paths in resolve method
fix: Apr 17, 2026
this.resolve() returns null for bare relative paths without importer
f42131a to
cc2437f
Compare
shulaoda
approved these changes
Apr 17, 2026
Merging this PR will not alter performance
Comparing Footnotes
|
Closed
This was referenced Apr 22, 2026
Closed
Merged
shulaoda
added a commit
that referenced
this pull request
Apr 22, 2026
## [1.0.0-rc.17] - 2026-04-22 ### 🐛 Bug Fixes - link: error on missing export between TS modules (#9197) by @IWANABETHATGUY - rolldown_plugin_vite_import_glob: import path should not be affected by absolute base option (#9145) by @kermanx - `this.resolve()` returns null for bare relative paths without importer (#9142) by @Copilot - collect destructured bindings in HMR module exports (#9146) by @h-a-n-a - esbuild-tests: handle 0.28.0 test cases (#9149) by @sapphi-red - plugin/copy-module: honor external resolutions from other plugins (#9139) by @TheAlexLichter - allow undefined in sourcesContent type (#9136) by @jurijzahn8019 - reduce false positives in chunk optimizer circular dependency detection (#9049) by @AlonMiz ### 🚜 Refactor - chunk-optimizer: extract runtime-module placement into rehome_runtime_module (#9163) by @IWANABETHATGUY ### 📚 Documentation - add design doc for sort_modules execution ordering (#9169) by @IWANABETHATGUY - add document for `RenderedModule` (#9147) by @sapphi-red ### ⚡ Performance - rolldown_plugin_vite_import_glob: skip self-import earlier using raw path comparison (#9193) by @shulaoda ### 🧪 Testing - lazy: add `playground/lazy-compilation` (#7974) by @hyf0 ### ⚙️ Miscellaneous Tasks - use app token for release PR (#9198) by @Boshen - upgrade oxc to 0.127.0 (#9194) by @Dunqing - use oxc security action (#9196) by @Boshen - esbuild-tests: remove some tests from ignored list as enum inline is now supported (#9184) by @sapphi-red - deps: update dependency vite-plus to v0.1.19 (#9183) by @renovate[bot] - use vp instead of pnpm in check-wasi-binding-deps (#9182) by @shulaoda - verify wasm32-wasi binding deps match @rolldown/browser before publish (#9162) by @shulaoda - deps: update esbuild for tests to 0.28.0 (#9172) by @sapphi-red - deps: update rollup submodule for tests to v4.60.2 (#9173) by @sapphi-red - deps: update test262 submodule for tests (#9174) by @sapphi-red - sort_modules: fix stale async-entry sort key comment (#9170) by @IWANABETHATGUY - deps: update npm packages (#9157) by @renovate[bot] - deps: update dependency diff to v9 (#9158) by @renovate[bot] - deps: update rust crates (#9156) by @renovate[bot] - run Windows CI on PRs labeled with `ci: windows` (#9153) by @hyf0 - update-test-dependencies: run setup-rust before file changes (#9151) by @sapphi-red - deps: update dependency rust to v1.95.0 (#9140) by @renovate[bot] ### ❤️ New Contributors * @jurijzahn8019 made their first contribution in [#9136](#9136) * @AlonMiz made their first contribution in [#9049](#9049) --------- Co-authored-by: shulaoda <165626830+shulaoda@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When calling
this.resolve('src/index.ts')(bare relative path, no./prefix) from a plugin hook without an importer, Rolldown returnsnull. Rollup resolves such paths against CWD, which is the expected behavior.Root cause
try_rollup_compatibility_resolve— which handles CWD-relative fallback resolution — was gated onis_user_defined_entry. Pluginthis.resolve()calls go throughNativePluginContextImpl::resolve(), which hardcodesis_user_defined_entry = false, so the fallback was never triggered.Rollup's built-in resolver skips bare specifiers only when an importer is present:
Fix
Extend the condition in
Resolver::resolveto also apply the compatibility fallback whenimporterisNone, regardless ofis_user_defined_entry:This covers both user-defined entries (
{ input: 'main' }) and plugin-initiatedthis.resolve()calls without an importer — both are semantically entry-level resolves with no relative base.Test
Added an integration test that calls
ctx.resolve("src/lib.js", None, None)frombuildStartand asserts it resolves to<cwd>/src/lib.js.