perf(resolve): refactor package.json handling for deep imports#12461
Conversation
|
|
|
/ecosystem-ci run |
|
📝 Ran ecosystem CI: Open
|
|
Qwik, Nuxt, and Histoire are also currently failing on main (same errors). But Vitepress against main was successful, so there may be a regression for it 👀 |
|
I ran the VitePress test locally, and I can get the same error, but it's not always reproducible. When they do fail, I can confirm that the VitePress page has an empty I can confirm when running some repros that this PR improves the resolve speed slightly, so it's not slowing down the tests that causes it to timeout. Not really sure what to do here though, we could maybe test again when we start the minor. I'm guessing it's some sort of race condition, since running that failing test directly via |
|
cc @brc-dd in case you have some time to help us debugging this in VitePress before 4.3 |
|
Yeah, I'll look into this, it's probably just a flaky test IG 👀 Even in our repo, we sometimes have to rerun jobs. |
|
Ah, ok nvm. You guys already triggered it 3 times. |
|
Seems like some issue with one of our deps, appears to be working after bumping them: https://github.com/brc-dd/vite-ecosystem-ci/actions/runs/4448482529/attempts/1, https://github.com/brc-dd/vite-ecosystem-ci/actions/runs/4448586970/jobs/7811590602 |
|
/ecosystem-ci run vitepress |
|
Failed 🫠 |
|
/ecosystem-ci run vitepress |
|
Yeah it looks like something in this PR is causing it to happen more frequently, but I can't tell where. Thanks for looking into this though @brc-dd! |
|
/ecosystem-ci run vitepress |
|
/ecosystem-ci run vitepress |
Description
Partial revert of #5665. That PR was not
exportsfriendly and we had to fix it in #10371, but it mixes both "root" package.json and "nearest" package.json, which needs to be handled separately.This PR refactors in a way that
pkgpassed toresolveDeepImportandresolvePackageEntryis always the "root" package.json. If further down the chain a resolve logic needs the "nearest" package.json, they can resolve it themselves.This change shouldn't break
resolvePackageEntry(since that's root import only), but changesresolveDeepImportslightly, where:exportsfield, thebrowserfield (if available) will be derive from the "root" package.json (now), instead of the "nearest" package.json (before)I think the above is a bug fix though.
More details about `browser`
According to https://github.com/defunctzombie/package-browser-field-spec#alternate-main---basic:
It implies that
package.jsonother than "root" should be checked too, but if we respect it, that means we have to check allpackage.jsonthat's part of the current file path, which is a lot of work even if thebrowserfield was never used.I think it's fine for now to check the
browserfield based on "root" package.json only as that's the more common case.Additional context
No benchmarks 😬 But I noticed this optimization as we're consistently trying to resolve
package.jsonfor long deep import paths due to:vite/packages/vite/src/node/plugins/resolve.ts
Lines 717 to 725 in 535c8c5
What is the purpose of this pull request?
Before submitting the PR, please make sure you do the following
fixes #123).