fix(ssr): improved dependency resolution #5220
Closed
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.
This PR affects SSR only.
Support
resolveId
hooks that coerce bare imports into local module paths.For example, the
vite-tsconfig-paths
plugin.vite:resolve
, check if the resolved ID is an absolute path that exists in the project root. If it is, avoid marking it as external (for SSR builds) and return the absolute path.Respect
ssr.noExternal
insidessrImport
createSSRExternalsFilter
function, which wrapscreateFilter
from@rollup/plugin-utils
vite:resolve
, check if the resolved ID is an absolute path that exists in the project root. If not, preserve the unresolvedid
so thessr.noExternal
check inssrImport
can work properly.Note that
ssrImport
will never receive the following specifiers (after this PR is merged):/@id/
prefix/@fs/
prefixUse
moduleGraph.getModuleByUrl
instead of accessingurlToModuleMap
directly, so that bare imports added tossr.noExternal
are normalized first. Otherwise, the module will always be undefined.Remove the need for
unwrapId
insidessrImport
/@id/
to bare imports insidevite:import-analysis