Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Svelte: Fix Vite crashing on virtual module imports #26838

Merged
merged 3 commits into from
Mar 6, 2025

Conversation

rChaoz
Copy link
Contributor

@rChaoz rChaoz commented Apr 14, 2024

Closes #20562

What I did

Surround the readFileSync with a try/catch so there is no unhandled exception for trying to load non-existing files (which happen with virtual module imports).

Checklist for Contributors

Testing

The changes in this PR are covered in the following automated tests:

  • stories
  • unit tests
  • integration tests
  • end-to-end tests

Manual testing

This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!

Install storybook in a SvelteKit project that uses unplugin icons. It doesn't work. With this PR it does.

Documentation

  • Add or update documentation reflecting your changes
  • If you are deprecating/removing a feature, make sure to update
    MIGRATION.MD

Checklist for Maintainers

  • When this PR is ready for testing, make sure to add ci:normal, ci:merged or ci:daily GH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found in code/lib/cli/src/sandbox-templates.ts

  • Make sure this PR contains one of the labels below:

    Available labels
    • bug: Internal changes that fixes incorrect behavior.
    • maintenance: User-facing maintenance tasks.
    • dependencies: Upgrading (sometimes downgrading) dependencies.
    • build: Internal-facing build tooling & test updates. Will not show up in release changelog.
    • cleanup: Minor cleanup style change. Will not show up in release changelog.
    • documentation: Documentation only changes. Will not show up in release changelog.
    • feature request: Introducing a new feature.
    • BREAKING CHANGE: Changes that break compatibility in some way with current major version.
    • other: Changes that don't fit in the above categories.

🦋 Canary release

This PR does not have a canary release associated. You can request a canary release of this pull request by mentioning the @storybookjs/core team here.

core team members can create a canary release here or locally with gh workflow run --repo storybookjs/storybook canary-release-pr.yml --field pr=<PR_NUMBER>

Sorry, something went wrong.

@IanVS
Copy link
Member

IanVS commented Apr 22, 2024

Thanks for the PR, but I think the correct fix here is to use the src given to us rather than reading the file directly. Would you like to give that a shot?

Though, now I'm curious why we didn't just do that to begin with. It's been quite a while since I worked on any of this code...

@IanVS IanVS requested a review from JReinhold April 22, 2024 12:45
@rChaoz
Copy link
Contributor Author

rChaoz commented Apr 22, 2024

@IanVS thanks the the suggestion! This is what I tried to do initially (as you can see by the commit history), but then the entire plugin stopped working. The src argument and the rawSource being read are not the same.

@JReinhold JReinhold self-assigned this Apr 24, 2024
@JReinhold JReinhold changed the title Fix crash on processing virtual module imports Svelte: Fix Vite crashing on virtual module imports Apr 24, 2024
@JReinhold
Copy link
Contributor

JReinhold commented Apr 24, 2024

Thanks for the PR @rChaoz!

The src argument and the rawSource being read are not the same.

I think this is because we need the initial source, and not the source as transformed by all the plugins before it - but I could be completely wrong.

@rChaoz can you describe what will now happen in the case of virtual modules? "Ignoring" them now, how does that impact the result (other than not crashing of course)?

I guess it won't be an issue because there's no way for docgen data from virtual modules to be surfaced to users anyway, so it doesn't matter if we ignore them or not.
I wonder if we should just completely skip virtual modules in this plugin?

Copy link

nx-cloud bot commented Apr 24, 2024

View your CI Pipeline Execution ↗ for commit abd68a3.

Command Status Duration Result
nx run-many -t build --parallel=3 ✅ Succeeded 1m 56s View ↗

☁️ Nx Cloud last updated this comment at 2025-03-05 09:12:56 UTC

@rChaoz
Copy link
Contributor Author

rChaoz commented Apr 24, 2024

@JReinhold so really, nothing changes for virtual modules - without this PR it just crashes, so it does nothing. With this PR it skips them, also doing nothing. So, it just allows it to run on files with virtual imports without crashing.

I believe it might be OK to just skip virtual modules altogether - the behaviour wouldn't be different.

@JReinhold
Copy link
Contributor

I believe it might be OK to just skip virtual modules altogether - the behaviour wouldn't be different.

Can you make those changes? I think it would also make the code a bit clearer.

@Stadly
Copy link

Stadly commented Jan 28, 2025

Any news on this? Would be nice to be able to use unplugin-icons with Storybook!

@rChaoz
Copy link
Contributor Author

rChaoz commented Jan 28, 2025

@Stadly I will update this PR. Until then, the workaround here still works: #20562 (comment)

@niemyjski
Copy link

any idea when this will get merged?

@rChaoz
Copy link
Contributor Author

rChaoz commented Feb 25, 2025

I've just tried out the version with checking for virtual modules (see changes at this point), and it doesn't seem to work, possibly because unplugin-icons doesn't follow the convention to add a \0 character at the front of the virtual module ID. I'll re-add the try/catch from the previous/working version.

@rChaoz
Copy link
Contributor Author

rChaoz commented Feb 25, 2025

@JReinhold please take a look whenever you can. I've updated the logic to ignore virtual modules (with the standard \0 marker), but since unplugin-icons components don't have it, the try/catch is still needed.

@lubiah
Copy link

lubiah commented Mar 3, 2025

urgently waiting for this to get fixed

@Stadly
Copy link

Stadly commented Mar 5, 2025

urgently waiting for this to get fixed

Me too. I'm ready to create a PR setting up Storybook at our company. Would be very nice to not have to run the workaround through peer review if it anyway will be fixed soon :)

@JReinhold JReinhold added the patch:yes Bugfix & documentation PR that need to be picked to main branch label Mar 5, 2025
@JReinhold JReinhold merged commit 6003bb8 into storybookjs:next Mar 6, 2025
52 checks passed
@JReinhold
Copy link
Contributor

Great job @rChaoz, and thanks everyone for the patience. ❤️

@github-actions github-actions bot mentioned this pull request Mar 6, 2025
12 tasks
@github-actions github-actions bot mentioned this pull request Mar 6, 2025
18 tasks
kasperpeulen pushed a commit that referenced this pull request Mar 14, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Svelte: Fix Vite crashing on virtual module imports
(cherry picked from commit 6003bb8)
@github-actions github-actions bot added the patch:done Patch/release PRs already cherry-picked to main/release branch label Mar 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug builder-vite ci:normal patch:done Patch/release PRs already cherry-picked to main/release branch patch:yes Bugfix & documentation PR that need to be picked to main branch svelte
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

[Bug]: Storybook doesn’t work with unplugin icons
6 participants